fix: 存盘不再清空组合设备的子单元(m_Combins) #48

Merged
gjm merged 1 commits from company-desktop-computer/fix/ewequipment-combins AGit into main 2026-10-25 10:32:43 +08:00
Collaborator

dwgOutFieldsForXPrim 里的容错条件写成
m_eType != kRevitCombination || m_eType != kRevitCombination
恒为真,任何单元存盘前都会执行 m_Combins.clear():

  • 组合设备(kCombination)写出去就是 0 个子单元,存盘一次几何永久丢失
  • clear() 只清 vector 不释放指针,内存里的 XPrimData 全部泄漏
  • 存盘是只读语义,原代码却在写盘路径里修改了对象状态

改为按实际有效数量写出,不修改对象状态;跳过 NULL 并单独计数,避免
"写了数量但循环少写一条"造成读写错位。同时删掉定义后未使用的 int num。

没有按原方案把条件改成 &&,也没有在读入端加过滤:m_Combins 只有组合
单元才会非空,写端正确后不存在"非组合类型带子单元"的数据,保留枚举
判断等于把正确性押在类型比较上,和原来的错误同源。

受影响的图纸里组合设备的子单元已经被写没了,无法从 dwg 恢复,不做数据
迁移。文档同步更新 3.1、5.2、5.4、6、8。

dwgOutFieldsForXPrim 里的容错条件写成 m_eType != kRevitCombination || m_eType != kRevitCombination 恒为真,任何单元存盘前都会执行 m_Combins.clear(): - 组合设备(kCombination)写出去就是 0 个子单元,存盘一次几何永久丢失 - clear() 只清 vector 不释放指针,内存里的 XPrimData 全部泄漏 - 存盘是只读语义,原代码却在写盘路径里修改了对象状态 改为按实际有效数量写出,不修改对象状态;跳过 NULL 并单独计数,避免 "写了数量但循环少写一条"造成读写错位。同时删掉定义后未使用的 int num。 没有按原方案把条件改成 &&,也没有在读入端加过滤:m_Combins 只有组合 单元才会非空,写端正确后不存在"非组合类型带子单元"的数据,保留枚举 判断等于把正确性押在类型比较上,和原来的错误同源。 受影响的图纸里组合设备的子单元已经被写没了,无法从 dwg 恢复,不做数据 迁移。文档同步更新 3.1、5.2、5.4、6、8。
company-desktop added 1 commit 2026-10-25 10:30:32 +08:00
dwgOutFieldsForXPrim 里的容错条件写成
  m_eType != kRevitCombination || m_eType != kRevitCombination
恒为真,任何单元存盘前都会执行 m_Combins.clear():

- 组合设备(kCombination)写出去就是 0 个子单元,存盘一次几何永久丢失
- clear() 只清 vector 不释放指针,内存里的 XPrimData 全部泄漏
- 存盘是只读语义,原代码却在写盘路径里修改了对象状态

改为按实际有效数量写出,不修改对象状态;跳过 NULL 并单独计数,避免
"写了数量但循环少写一条"造成读写错位。同时删掉定义后未使用的 int num。

没有按原方案把条件改成 &&,也没有在读入端加过滤:m_Combins 只有组合
单元才会非空,写端正确后不存在"非组合类型带子单元"的数据,保留枚举
判断等于把正确性押在类型比较上,和原来的错误同源。

受影响的图纸里组合设备的子单元已经被写没了,无法从 dwg 恢复,不做数据
迁移。文档同步更新 3.1、5.2、5.4、6、8。
gjm approved these changes 2026-10-25 10:32:38 +08:00
gjm merged commit da0c5c560b into main 2026-10-25 10:32:43 +08:00
Sign in to join this conversation.
No Reviewers
No labels
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: gjm/envi-code#48