From e448dbacfd9898c2d8c38bd84f1f2249a4ed69df Mon Sep 17 00:00:00 2001 From: company-desktop-computer Date: Sun, 25 Oct 2026 12:10:09 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20GetInterface=20=E6=95=B0=E7=BB=84?= =?UTF-8?q?=E7=89=88=20bSizeUnLock=20=E8=A2=AB=20memset=20=E6=B8=85?= =?UTF-8?q?=E6=88=90=20false?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit inf.bSizeUnLock = true 原来写在循环外,循环内每次都 memset(&inf, 0, ...), 赋值被清掉,数组版返回的接口实际一直是"锁定"状态。 把赋值挪到 memset 之后;循环外那两行初始化(bSizeUnLock / dGasket)删掉, memset 之后本来就是 0。 bSizeUnLock 目前只在 i_AecDbXEquipment.cpp 里序列化,没有读取判断的地方, 所以此前没暴露成故障。 --- AecDbEwEquipment-analysis.md | 2 +- SourceCode/Code2026/CoreLibrary/AecDbEwEquipment.cpp | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/AecDbEwEquipment-analysis.md b/AecDbEwEquipment-analysis.md index c87fb60..ae45375 100644 --- a/AecDbEwEquipment-analysis.md +++ b/AecDbEwEquipment-analysis.md @@ -377,7 +377,7 @@ return (nCount - nCoundPre); // :12762 顺序反了 - 影响面:数组版的 4 处内部调用(`getOsnapPoints`、`subErase`、`DrawInfArrow`、`vtAdjust`)只用 `ptPos` / `vtDir`;外部消费 `dSize1` 的是 `CoreCommand/pcf.cpp:1044` 的 `pcf_ewEquipment`,米制图纸导出的 PCF 管径此前大了 1000 倍 - 只在米制图纸(`INSUNITS == kUnitsMeters`)里有差异,毫米图纸 `dUnit` 为 1,行为不变 -**顺带发现(未改)**:同一函数里 `inf.bSizeUnLock = true;` 写在 `:3283`,循环内的 `memset(&inf, 0, sizeof(AecInterface))`(`:3294`)每次都把它清成 false,所以数组版返回的接口实际一直是「锁定」。下标版由调用方传入 `inf`,不经过 memset。修这个要确认下游怎么用 `bSizeUnLock`,单独评估。 +**顺带修复**:同一函数里 `inf.bSizeUnLock = true;` 原来写在循环外,循环内的 `memset(&inf, 0, sizeof(AecInterface))` 每次都把它清成 false,数组版返回的接口实际一直是「锁定」。已把赋值挪到 `memset` 之后,循环外那两行初始化(`bSizeUnLock` / `dGasket`)随之删掉——memset 之后本来就是 0。`bSizeUnLock` 目前只被 `i_AecDbXEquipment.cpp` 序列化,没有读取判断的地方,所以此前没有暴露成故障。 ### 3.8 P1:`copyFrom` 漏拷字段(已修复) diff --git a/SourceCode/Code2026/CoreLibrary/AecDbEwEquipment.cpp b/SourceCode/Code2026/CoreLibrary/AecDbEwEquipment.cpp index e3a4811..a58a76a 100644 --- a/SourceCode/Code2026/CoreLibrary/AecDbEwEquipment.cpp +++ b/SourceCode/Code2026/CoreLibrary/AecDbEwEquipment.cpp @@ -3280,8 +3280,6 @@ bool AecDbEwEquipment::GetInterface(AcArray& arInfs) const } AecInterface inf; - inf.bSizeUnLock = true;//不锁定 - inf.dGasket = 0; AecEqui::XPrimData* p3dSolid(NULL); for (int i = 0; i < m_arSubPrimPtrs.GetSize(); i++) @@ -3292,6 +3290,7 @@ bool AecDbEwEquipment::GetInterface(AcArray& arInfs) const if (!pNoze) continue; ::memset(&inf, 0, sizeof(AecInterface)); + inf.bSizeUnLock = true; //不锁定;必须放在 memset 之后,否则每次都被清成 false GetInfFaceInf(p3dSolid, vtDir, ptGe, 1); ptGe.transformBy(xform);