gjm
|
d1bdf281cc
|
Merge pull request '更新 CODEBUDDY.md:补充构建/链接细节,修正 preset 数量,新增 ZRX 平台注意事项' (#72) from home-lenovo-legion-r9000/doc-codebuddy-md-update into main
Reviewed-on: #72
Reviewed-by: gjm <littleoldpan@163.com>
|
2026-10-25 23:14:03 +08:00 |
|
gjm
|
46e329181c
|
更新 CODEBUDDY.md:补充构建/链接细节,修正 preset 数量,新增 ZRX 平台注意事项
|
2026-10-25 23:13:02 +08:00 |
|
gjm
|
662ca27149
|
Merge pull request '新增 XEquipment 外壳/Impl 机制分析与重构计划文档' (#71) from home-lenovo-legion-r9000/xequipment-refactor-plan into main
Reviewed-on: #71
|
2026-10-25 23:12:01 +08:00 |
|
gjm
|
aabbd3cc1d
|
新增 XEquipment 外壳/Impl 机制分析与重构计划文档
|
2026-10-25 23:10:15 +08:00 |
|
gjm
|
c30d3afde2
|
Merge pull request '更新分析文档:E3 已修复,补充 E2/E4/E5 不改的原因' (#70) from home-lenovo-legion-r9000/doc-gidraw-e2-e4-e5 into main
Reviewed-on: #70
|
2026-10-25 19:20:15 +08:00 |
|
gjm
|
8bf914e6b6
|
更新分析文档:E3 已修复,补充 E2/E4/E5 不改的原因
- 7.1 增加 E3 条目(PR #69);
- 7.4 由“未处理”改为“确认不改”,逐条写明原因;
- E2 重点说明:只在超长路径回退分支触发、需重构两个 DrawPipe 重载、
真正的瓶颈是后续 N-1 次 booleanOper 合并,收益不划算。
|
2026-10-25 19:20:00 +08:00 |
|
gjm
|
d329428791
|
Merge pull request '优化 transfromRegion:旋转与平移合成一次 region 变换(E3)' (#69) from home-lenovo-legion-r9000/fix-gidraw-transfromregion-e3 into main
Reviewed-on: #69
Reviewed-by: gjm <littleoldpan@163.com>
|
2026-10-25 19:18:26 +08:00 |
|
gjm
|
86bb3b778a
|
优化 transfromRegion:旋转与平移合成一次 region 变换(E3)
原来对 AcDbRegion 连做两次 transformBy(先转到平面、再平移),
region 是 ACIS body,每次变换都要重建拓扑,而该函数在
DrawPipe(pCurve, pRegion, ptCenInRgn) 里每个管件都会调用。
改为先算出 ptOnRegion 变换后的落点,把平移量用 preMultBy 合成进
同一个矩阵,region 只做一次 ACIS 变换;顺带删掉 plan.get(pt0,pt1,pt2)
这三个未使用的局部变量。
|
2026-10-25 19:16:43 +08:00 |
|
gjm
|
bc7bf7b15b
|
Merge pull request '更新 GiDrawUtility 分析文档:补充修复状态与 S3 误判结论' (#68) from home-lenovo-legion-r9000/doc-gidrawutility-analysis-status into main
Reviewed-on: #68
|
2026-10-25 19:10:10 +08:00 |
|
gjm
|
4e2ac8e23d
|
更新 GiDrawUtility 分析文档:补充修复状态与 S3 误判结论
- 顶部状态改为已修复清单(PR #62/#64/#65/#67);
- 新增第 7 节:已修复明细、确认不改项、S3 误判说明、未处理的效率项;
- 修正关联头文件:DELETE_PTR 实际来自 inc/memOper.h 的模板函数。
|
2026-10-25 19:09:49 +08:00 |
|
gjm
|
3e6d7f4dec
|
Merge pull request '修复 GiDrawUtility 参数校验与规范问题 B7、B9、S1' (#67) from home-lenovo-legion-r9000/fix-gidrawutility-b7-b9-s1 into main
Reviewed-on: #67
Reviewed-by: gjm <littleoldpan@163.com>
|
2026-10-25 19:08:16 +08:00 |
|
gjm
|
74730f2c91
|
修复 GiDrawUtility 参数校验与规范问题 B7、B9、S1
- B7: DrawPipe(pCurve, dR) 检查 getStartPoint 返回值,避免未定义点传给 getFirstDeriv。
- B9: 补充参数校验:
DrawDish 大直径为 0 时 2*dH/dD 除零;
DrawCirTorus / DrawRectTorus 小半径不小于大半径时截面半径为负(RectTorus 另校验高度);
DrawPipe(ptFrom, ptTo, ...) 零长度路径无法扫掠;
DrawPipe(pCurve, dR) 半径非正。
- S1: spliteCurve、deleteContainerOfArx 由文件级 static 移入已有的匿名 namespace。
|
2026-10-25 19:07:16 +08:00 |
|
gjm
|
01b21dfa0d
|
Merge pull request '修复 GiDrawUtility 逻辑缺陷 L7、B2-B5' (#65) from home-lenovo-legion-r9000/fix-gidrawutility-l7-b2-b5 into main
Reviewed-on: #65
Reviewed-by: gjm <littleoldpan@163.com>
|
2026-10-25 18:48:15 +08:00 |
|
gjm
|
14d3ff43c9
|
修复 GiDrawUtility 逻辑缺陷 L7、B2-B5
- L7: 新增 TakeFirstRegion,createFromCurves 返回多个 region 时只取第一个并释放其余,
createRegion(AcDbEntity*)、DrawDish、DrawPipe(curve,dR) 三处统一走此路径;
DrawDish 同时在 DrawRevolve 失败时释放 region。
- B2: RotateAndMove 的零向量防护原为 "*= 1" 空操作,改为显式判零并退化为 Z 轴。
- B3: DrawTydf 的 tfdy 分支截面各自平移后未更新引导线,改为重设端点到变换后的截面中心。
- B4: DrawMesh 增加入参校验(pVertexList 非空、rows>=2、columns>=3),避免越界读与空截面。
- B5: DrawRevolve 建 region 失败时不再往模型空间塞红色曲线,改为直接释放克隆对象。
|
2026-10-25 18:46:19 +08:00 |
|
gjm
|
fad993af97
|
Merge pull request '修复 RotateAndMove 平移项缺失旋转分量导致落点错位' (#64) from home-lenovo-legion-r9000/fix-gidraw-rotatemove into main
Reviewed-on: #64
Reviewed-by: gjm <littleoldpan@163.com>
|
2026-10-25 18:41:51 +08:00 |
|
gjm
|
938edc0204
|
修复 RotateAndMove 平移项缺失旋转分量导致落点错位
平移量应为 ptDist - R*ptOrig,原实现写成 ptDist - ptOrig,
仅在 ptOrig 位于旋转轴上(含原点)时才成立。
DrawTydf 台体分支传入的 ptBottom 非原点,vtMove 倾斜时
实体整体偏移 |R*ptOrig - ptOrig|,本次一并修正。
|
2026-10-25 18:35:41 +08:00 |
|
gjm
|
ed996c10bc
|
Merge pull request 'fix: 修复 GiDrawUtility 失败路径内存泄漏(L3-L6)' (#62) from home-lenovo-legion-r9000/fix/gidrawutility-leak-l3-l6 into main
Reviewed-on: #62
Reviewed-by: gjm <littleoldpan@163.com>
|
2026-10-25 18:18:29 +08:00 |
|
gjm
|
4de7c883a6
|
fix: 修复 GiDrawUtility 失败路径内存泄漏(L3-L6)
- L3: DrawLoft(曲线版) createRegion 失败时清理三个 clone 及已成功的 region
- L4: DrawBox/DrawSphere 创建失败时释放 pSolid
- L5: DrawMesh loft 失败时释放 pSection 数组与 vecPLs 中各 polyline
- L6: DrawPipe(曲线,半径) ARX 扫掠分支补 DELETE_PTR(pReg),与 ZWCAD/extrude 分支对齐
|
2026-10-25 18:05:51 +08:00 |
|
gjm
|
fd422a0255
|
Merge pull request 'fix: 修复 GiDrawUtility::DrawPipe 每次画管泄漏 region' (#61) from home-lenovo-legion-r9000/fix/gidrawutility-pipe-region-leak into main
Reviewed-on: #61
Reviewed-by: gjm <littleoldpan@163.com>
|
2026-10-25 18:01:16 +08:00 |
|
gjm
|
7c9d849348
|
fix: 修复 GiDrawUtility::DrawPipe 每次画管泄漏 region
- 删除重复调用且丢弃结果的 createRegion(L1:每次调用必漏一个 AcDbRegion)
- 内圆 region 创建失败时释放 pBig(L2a)
- booleanOper 成功后释放第二个操作数 pSml(L2b,与 AecDbEwPipeBase/AecDbEwFitting 惯例一致)
|
2026-10-25 17:59:42 +08:00 |
|
gjm
|
0ca35c9d6d
|
Merge pull request 'docs: GiDrawUtility 内存泄漏/效率/逻辑分析,未改代码' (#60) from home-lenovo-legion-r9000/docs/gidrawutility-analysis into main
Reviewed-on: #60
Reviewed-by: gjm <littleoldpan@163.com>
|
2026-10-25 17:53:56 +08:00 |
|
gjm
|
f7272787c5
|
docs: GiDrawUtility 内存泄漏/效率/逻辑分析,未改代码
|
2026-10-25 17:52:58 +08:00 |
|
gjm
|
fead8cccac
|
Merge pull request '重新整理utility/copyarx的目录结构' (#59) from home-lenovo-legion-r9000/重新整理utility/copyarx的目录结构 into main
Reviewed-on: #59
|
2026-10-25 17:49:24 +08:00 |
|
gjm
|
4fa3276b58
|
重新整理utility/copyarx的目录结构
重新整理utility/copyarx的目录结构
|
2026-10-25 17:49:05 +08:00 |
|
gjm
|
e0f31a3e61
|
Merge pull request '上传copyarx工程' (#58) from home-lenovo-legion-r9000/上传-copyarx-工程 into main
Reviewed-on: #58
|
2026-10-25 13:35:35 +08:00 |
|
gjm
|
ac3e6b0083
|
上传copyarx工程
上传copyarx工程
|
2026-10-25 13:34:19 +08:00 |
|
gjm
|
9ba35dbfdf
|
Merge pull request 'docs: 性能部分收尾,4.4/4.6 定为不做' (#57) from company-desktop-computer/docs/ewequipment-perf-final into main
Reviewed-on: #57
Reviewed-by: gjm <littleoldpan@163.com>
|
2026-10-25 13:08:30 +08:00 |
|
company-desktop
|
72f225a455
|
docs: 性能部分收尾,4.4/4.6 定为不做
|
2026-10-25 13:06:35 +08:00 |
|
gjm
|
5a07b11e42
|
Merge pull request 'docs: 记录性能部分 4.2~4.6 的结论' (#56) from company-desktop-computer/docs/ewequipment-perf-decisions into main
Reviewed-on: #56
|
2026-10-25 13:01:36 +08:00 |
|
company-desktop
|
2a6421de95
|
docs: 记录性能部分 4.2~4.6 的结论
- 4.2 已修复(PR #53),补充实际做法和原因
- 4.3 核实「缩放频繁时开销明显」不准确:Draw2d 开头命中 2D 缓存就直接返回,
只有 2D 缓存失效后的第一次绘制才会走到 Draw*Vlv2d,是一次性开销,暂缓
- 4.4 决定不缓存 INSUNITS;补「单元 -> 世界矩阵」的具体解释
- 4.5 剖切确实不再调用,但 KTEarthWormCmd 等仍有十几处,暂不动
- 4.6 评估后不建议照 AecDbX3dPart 惰性化:m_arSubPrimPtrs 是持久化数据本体,
99 处引用、约 40 个读函数,且索引语义在解析前后会变;给出先量、
解析结果缓存、惰性化三步替代路径
|
2026-10-25 12:47:35 +08:00 |
|
gjm
|
f60cfb50bf
|
Merge pull request 'fix: GetInterface 数组版 bSizeUnLock 被 memset 清成 false' (#55) from company-desktop-computer/fix/ewequipment-sizelock into main
Reviewed-on: #55
Reviewed-by: gjm <littleoldpan@163.com>
|
2026-10-25 12:18:49 +08:00 |
|
company-desktop
|
e448dbacfd
|
fix: GetInterface 数组版 bSizeUnLock 被 memset 清成 false
inf.bSizeUnLock = true 原来写在循环外,循环内每次都 memset(&inf, 0, ...),
赋值被清掉,数组版返回的接口实际一直是"锁定"状态。
把赋值挪到 memset 之后;循环外那两行初始化(bSizeUnLock / dGasket)删掉,
memset 之后本来就是 0。
bSizeUnLock 目前只在 i_AecDbXEquipment.cpp 里序列化,没有读取判断的地方,
所以此前没暴露成故障。
|
2026-10-25 12:10:09 +08:00 |
|
gjm
|
6a375aea75
|
Merge pull request 'fix: GetInterface 数组版补 dUnit,与下标版统一单位' (#54) from company-desktop-computer/fix/ewequipment-interface-unit into main
Reviewed-on: #54
Reviewed-by: gjm <littleoldpan@163.com>
|
2026-10-25 12:01:22 +08:00 |
|
company-desktop
|
d1f4d0b50b
|
fix: GetInterface 数组版补 dUnit,与下标版统一单位
AecDbEwEquipment::GetInterface(AcArray<AecInterface>&) 里 ptPos 已经
transformBy(xform) 缩放过(米制 0.001),但 dSize1 / dSize2 直接取
pNoze->dVal1,没有乘 dUnit;下标版 GetInterface(int, ...) 是乘了的。
结果同一个接口经两个入口读出来尺寸差 1000 倍,出现"位置按米、尺寸按毫米"。
补 * dUnit。dV / dA 是电压电流(EarThwormDef.h:518),不是长度,不参与换算。
影响面:
- 数组版的 4 处内部调用(getOsnapPoints、subErase、DrawInfArrow、vtAdjust)
只用 ptPos / vtDir,不受影响
- 外部消费 dSize1 的是 CoreCommand/pcf.cpp:1044 的 pcf_ewEquipment,
米制图纸导出的 PCF 管径此前大了 1000 倍
- 毫米图纸 dUnit 为 1,行为不变
文档同步:3.7 补结论与影响面,3.12 标记确认不改,5.1 加第 16 项,
5.4 三项按结论更新。
|
2026-10-25 11:58:00 +08:00 |
|
gjm
|
a72b38c4e5
|
Merge pull request 'fix 修正自定义设备拖拽时的效率问题' (#53) from home-lenovo-legion-r9000/修正自定义设备拖拽效率 into main
Reviewed-on: #53
Reviewed-by: gjm <littleoldpan@163.com>
|
2026-10-25 11:43:22 +08:00 |
|
gjm
|
cbbb7897f7
|
Merge pull request 'fix: 修复 AecDbEwEquipment 的 10 处逻辑缺陷' (#52) from company-desktop-computer/fix/ewequipment-logic into main
Reviewed-on: #52
Reviewed-by: gjm <littleoldpan@163.com>
|
2026-10-25 11:42:29 +08:00 |
|
gjm
|
2931ab875c
|
fix 修正自定义设备拖拽时的效率问题
拖拽时一样走绘制缓存
|
2026-10-25 11:29:19 +08:00 |
|
company-desktop
|
f668e29b6c
|
fix: 修复 AecDbEwEquipment 的 10 处逻辑缺陷
3.2 subErase:sName.Find(_T("接头")) 当布尔用,找不到返回 -1 也为真,
整个条件恒成立,删除任何设备都走阀门/接头的合并管线分支。补 != -1。
3.3 DrawHandFlg:else 分支写成 sFlag == _T("Y"),液动阀(3)符号文字一直是空串。
3.4 ProcessHlrResult:遍历 map 时 erase(it) 之后仍然 ++it。改成 while +
erase(it++),没有用 it = erase(it),因为 R190 走 C++98 标准,
C++03 的 map::erase(iterator) 返回 void。
3.5 GetSectionDraw:返回 nCount - nCoundPre(调用前减调用后),恒为 0 或负数。
改为 nCoundPre - nCount。全库调用点都忽略返回值,此前无实际故障。
3.8 copyFrom:补拷 m_bVert / m_idDash / m_idCenter。原来复制粘贴竖放阀门
会变横放,虚线与中心线的图层也丢失。
3.9 MakeBlockRefSet:判断的是累加器 ext 而不是本次的 extAdd,第一轮 ext 还是
空状态,第一个实体的范围永远加不进去;块参照分支不 continue,extAdd 会
沿用上一轮的值被重复累加。改为块参照跳过、extAdd 每轮新建并检查返回值。
3.10 byJson:br._len 是字节数,却按 new PVOID[br._len] 分配、按
sizeof(PVOID)*br._len 拷贝,源缓冲区越界读 7 倍。改为按字节分配拷贝,
并用 br._len 覆盖 m_nSize。
3.11 dwgInFieldsForXPrim:加 16MB 上限(kMaxXPrimDataSize),超限置
eInvalidInput 让整个 dwgInFields 退出;readBytes 检查返回值,失败时释放。
3.13 GetBodyBox:恒返回 TRUE,调用方无法区分是否取到几何;_ext 在循环外定义,
会把上一轮的累积结果重复并入。改为返回实际结果、每轮新建 _ext。
3.14 clearGeoBuffer:函数体只有 AssertWriteEnabled(),改完参数几何不刷新。
改为 Clean2DBuffer() + Clean3DBuffer()。
未处理,见文档 5.4:3.6 HLR_CALC 序列化(要动 AecDbObjXDataMap 公共类)、
3.7 GetInterface 数组版单位(影响 67 处调用)、3.12 mat4 双次变换(需确认是否刻意)。
|
2026-10-25 11:21:11 +08:00 |
|
gjm
|
44f53dede4
|
Merge pull request 'fix: selectEqu 的 pszSearch 判空条件写反' (#51) from company-desktop-computer/fix/equlibdlg-search into main
Reviewed-on: #51
|
2026-10-25 11:07:18 +08:00 |
|
company-desktop
|
eee1b76d18
|
fix: selectEqu 的 pszSearch 判空条件写反
PR #50 去掉早退后,赋值条件写成 if (!pszSearch),正好相反:
- pszSearch == NULL("插入设备"、selectSingleEqu(NULL, ...))
把 NULL 赋给 CString,Debug 版触发 ASSERT(AfxIsValidString)
- pszSearch != NULL(selectCustomValve 传入 "闸阀 DN100")
预填的搜索词被清成空串,对话框打开后搜索框是空的
改为 if (pszSearch)。同时补上下面 CString sText(pszSearch) 的空判断,
pszSearch 为 NULL 时构造 CString 同样会 ASSERT。
保持用调用者传入的 pszSearch 判断设备子类型,而不是 dlg.m_sSearch:
后者在 DoModal 之后可能已被用户改成别的搜索词。
|
2026-10-25 11:05:18 +08:00 |
|
gjm
|
f084e20fc6
|
Merge pull request 'fix 新建自定义设备对话框上的"插入设备"无效' (#50) from home-lenovo-legion-r9000/ai-dev-home into main
Reviewed-on: #50
|
2026-10-25 10:58:12 +08:00 |
|
gjm
|
a7418aa128
|
fix 新建自定义设备对话框上的"插入设备"无效
fix 新建自定义设备对话框上的"插入设备"无效
|
2026-10-25 10:57:32 +08:00 |
|
gjm
|
da0c5c560b
|
Merge pull request 'fix: 存盘不再清空组合设备的子单元(m_Combins)' (#48) from company-desktop-computer/fix/ewequipment-combins into main
Reviewed-on: #48
Reviewed-by: gjm <littleoldpan@163.com>
|
2026-10-25 10:32:42 +08:00 |
|
company-desktop
|
f6d701a661
|
fix: 存盘不再清空组合设备的子单元(m_Combins)
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。
|
2026-10-25 10:30:19 +08:00 |
|
gjm
|
61316a5f9f
|
Merge pull request 'refactor: 统一 XPrimData::m_pData 为字节数组,releaseData 只保留 delete[]' (#47) from company-desktop-computer/fix/ewequipment-memory-v2 into main
Reviewed-on: #47
Reviewed-by: gjm <littleoldpan@163.com>
|
2026-10-23 10:55:18 +08:00 |
|
company-desktop
|
41397130e2
|
refactor: 统一 XPrimData::m_pData 为字节数组,releaseData 只保留 delete[]
releaseData() 原来按 m_eType 分两路(8 种 delete[],其余 delete),但同一类型
在内存里可能是对象也可能是字节数组:开图、JSON 导入、深拷贝都分配 new byte[],
而对话框里 setData<T> 的 default 分支和几处直接 new 分配的是对象。按类型判断
必然有一半场景不匹配。
- 13 处对象形式分配统一改成 new unsigned char[sizeof(T)],后续 (T*)m_pData
的用法不变
- releaseData() 去掉 switch,只保留 delete[];~XPrimData() 改为先调 releaseData(),
顺带修掉 m_Combins 子单元的 m_pData 泄漏
- AecDbEwEquipment::FreeSubPrimData() 取代 FreeBuffer(CPtrArray&),改成成员函数,
不再需要参数
- 另外三个文件作用域的 FreeBuffer/FreeBuffer2/FreeBuffer3 改名为 FreeEntityArray/
FreeComplexCurveArray/FreeFaceplanArray,并加 static 收回内部链接
- 删除 ReleaseXPrimData,直接 releaseData() + DELETE_PTR
|
2026-10-23 10:29:31 +08:00 |
|
company-desktop
|
03bbe08b76
|
fix: 修复 AecDbEwEquipment 的内存泄漏(夹点数组、几何单元、剖切与投影克隆)
|
2026-10-23 09:57:20 +08:00 |
|
gjm
|
fe30846e4c
|
Merge pull request 'docs: 补 AecDbEwEquipment 内存、缺陷与性能分析' (#45) from company-desktop-computer/docs/ewequipment-analysis into main
Reviewed-on: #45
|
2026-10-23 08:24:32 +08:00 |
|
company-desktop
|
55391b8dc8
|
docs: 补 AecDbEwEquipment 内存、缺陷与性能分析
|
2026-10-22 16:31:00 +08:00 |
|
gjm
|
68b8ca12f0
|
Merge pull request 'docs: 13.2 按实际实现更新,m_bNeedCreate 懒加载 + Create 保持强制重建' (#44) from company-desktop-computer/docs/x3dpart-lazy-actual into main
Reviewed-on: #44
|
2026-10-22 15:50:07 +08:00 |
|