fix: GetInterface 数组版 bSizeUnLock 被 memset 清成 false
inf.bSizeUnLock = true 原来写在循环外,循环内每次都 memset(&inf, 0, ...), 赋值被清掉,数组版返回的接口实际一直是"锁定"状态。 把赋值挪到 memset 之后;循环外那两行初始化(bSizeUnLock / dGasket)删掉, memset 之后本来就是 0。 bSizeUnLock 目前只在 i_AecDbXEquipment.cpp 里序列化,没有读取判断的地方, 所以此前没暴露成故障。
This commit is contained in:
1 parent
6a375aea75
commit
e448dbacfd
2 files changed
+2
-3
No files matched your search
@@ -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` 漏拷字段(已修复)
|
||||
|
||||
|
||||
@@ -3280,8 +3280,6 @@ bool AecDbEwEquipment::GetInterface(AcArray<AecInterface>& 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<AecInterface>& arInfs) const
|
||||
if (!pNoze) continue;
|
||||
|
||||
::memset(&inf, 0, sizeof(AecInterface));
|
||||
inf.bSizeUnLock = true; //不锁定;必须放在 memset 之后,否则每次都被清成 false
|
||||
GetInfFaceInf(p3dSolid, vtDir, ptGe, 1);
|
||||
|
||||
ptGe.transformBy(xform);
|
||||
|
||||
Reference in new issue
Block a user