company-desktop
|
3afc2dd7c1
|
perf: 增加截面恢复路径的 Phase 0 计数器(Debug 探针)
按 pipe-section-region-performance-plan.md 的 Phase 0 落地。目的不是提速,而是先拿到
三个决定性数字,再判断截面缓存(Phase 1)到底值不值得做:
1) 每次截面恢复多贵(µs),一次开图共多少次;
2) 同一份 SAT 文本被重复恢复多少次(唯一 hash 数 / 模拟命中率)——直接决定缓存收益上限;
3) 临时文件写入次数与字节数(杀软扫描影响面),以及打开图纸时的回写次数。
改动:
- 新增 inc/SectionPerfCounter.h + CoreLibrary/SectionPerfCounter.cpp
- Scope(QPC 计时)+ NoteRegionText(FNV-1a 64 位 hash,统计唯一数与模拟命中)
+ NoteTempFile + NoteWriteBack + Dump/Reset
- 计数器实例放在函数内 static:CoreLibrary 是静态库且只被 CoreCommand 链接,
所以 CoreCommand.arx 里只有一份,两个入口共用
- AecDbEwPipeBase.cpp:RegionAcisInDwgInFields / RegionAcisoutDwgOutFields 接入
- CoreTools.cpp:StringToRegion 两个重载 / RegionToString 接入
- EarthWorm.cpp:注册 ENVIPERFDUMP / ENVIPERFRESET(仅 Debug)
- CoreLibrary/cmakelists.txt 加一个源文件
- 计划文档的 Phase 0 补上实际命令与采集项
开关:启动 CAD 前 set AEC_PERF_COUNTER=1;命令 ENVIPERFDUMP 打印并追加到
%TEMP%\aec_section_perf.txt,ENVIPERFRESET 清零。
Release 下 Enabled() 恒为 false,调用点只剩一次 bool 判断。
不改任何几何逻辑与存盘格式。
验证:R230 Debug 编译通过(CoreLibrary_BAL_REMOTE、CoreCommand_BAL_REMOTE,无新增 warning),
产物已自动部署到 c:\ShangHuaSoft\Envi3D-2026-M\R230\。
R190 未在本机编译(缺 v100 工具集);代码刻意只用 C++98 特性,控制台输出改走 %hs,
避开了 &wstring[0] 这类老 STL 上的写法问题。
尚未做 CAD 实测:需要开图后跑 ENVIPERFDUMP 才看得到数据。
|
2026-10-28 19:31:27 +08:00 |
|
gjm
|
9b80db3852
|
rafactor-pipe,fitting-speedup
rafactor-pipe,fitting-speedup
|
2026-10-27 22:29:12 +08:00 |
|
company-desktop
|
4fc910d6fd
|
fix: 曲线通道重建截面时防崩溃
RegionFromCurvesDwgInFields 里两处:
- isRegionNull(pRegion) && isRegionNull(pRegionBig) 改为 ||,原写法要求
两个都无效才跳过,实际 pRegionBig 此时必非空,条件恒假,无效 region
照样进布尔运算
- booleanOper 改走已有的 rawBooleanOperWrapper,ACIS 内部异常时由 SEH
捕获,不再直接崩 CAD
顺带 delete pRegion:arRegPtrs 不拥有对象,原来 subtract 完没有释放。
曲线通道只读,spline 参数在写端从未落盘,几何缺失无法靠读端修复,
本次只处理崩溃路径,重建逻辑与启发式保持原样。
|
2026-10-22 10:24:54 +08:00 |
|
company-desktop
|
8630e2a499
|
fix: 未入库管道实体存截面时临时文件名不再撞车
objectId() 为 kNull 时(剪贴板复制、临时序列化等),handle 取不到,
原来拼出来的文件名固定是 Region_<pid>_.dat,同一次存盘里所有截面共用
一个临时文件。
改为:句柄有效时仍用句柄,否则用进程内递增序号 N1/N2/... 作为后缀。
日志里的标识同步从 handle 改成 tag。
|
2026-10-21 23:22:21 +08:00 |
|
company-desktop
|
8941246b16
|
refactor: 管道截面统一存 SAT,曲线写路径退役
SectionRegionDwgOutFields 不再 explode 后按曲线写,改为固定写 nLen=0 +
RegionAcisoutDwgOutFields。读取端 nLen==0 本来就识别 SAT 通道,因此
kCurrentVersionNumber 保持 7,新图在老插件上仍可还原。
同时修 SAT 通道自身缺陷:
- RegionAcisoutDwgOutFields:临时文件名加进程号;new char[nLen] 补 +1 并
清零;检查短读,短读或空文件退回原生写法,不再把未初始化内存写进 DWG;
acisOut/Open 失败分支补 DeleteFile;两个重复的 errorfile 分支合并为
WriteRegionNativeFallback,顺带修掉 7 字节泄漏
- RegionAcisInDwgInFields:临时文件名只取纯文件名,拒绝 DWG 里夹带的路径
成分和盘符;errorfile 分支补 delete[];create/dwgInFields/acisIn 失败
分支加日志并正确释放;acisIn 返回的非 region 实体不再泄漏
- 删除 RegionExplodeDwgOutFields(写路径退役后无调用者)
|
2026-10-21 22:15:49 +08:00 |
|
company-desktop
|
0467086e65
|
重构: AecXData 类型标签改用枚举 AecXData::EType
- 在 AecXData 内新增 enum EType,取值直接采用 wtypes.h 的 VARENUM(VT_*),
与原实现逐位一致(nVt 会序列化进 DWG/DXF/XData,数值必须保持不变)。
- 各模块共 303 处 nVt 判断由裸 VT_* 改为 AecXData::kTypeXxx,涉及 18 个文件;
仅调试打印用的字符串字面量保持原样。
- AecDbObjXDataMap.h 增加 #include <wtypes.h>(EType 引用 VT_*)。
|
2026-10-13 09:55:42 +08:00 |
|
gjm
|
164968b62e
|
chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
|
2026-10-04 00:04:20 +08:00 |
|
gjm
|
345044cb46
|
初始化提交
|
2026-09-28 15:28:50 +08:00 |
|