Phase 0 在本机跑通(big1.dwg / AutoCAD 2020 / R230 Debug,开图 108 s): RegionTexts=5641 UniqueHashes=2597 SimulatedHits=3044 HitRate=54.0% TempFiles=6773 TempBytes=9,341,125 WriteBacks=1140 CoreTools::StringToRegion 2559 次 14.6 s 平均 5.7 ms 最长 321 ms EwPipe::RegionAcisIn 3082 次 8.3 s 平均 2.7 ms EwPipe::RegionAcisout 1140 次 2.3 s 平均 2.0 ms 结论:一次开图做 5641 次 SAT 恢复,共 22.9 s(约占 108 s 的 21%)。 此前基于 CPU 采样的估算只有 550~1000 次,低估了 5~10 倍——说明采样只能算占比, 算不出调用次数,这类结论必须靠计数器。 按 54% 命中率折算,Phase 1 缓存净省约 12 s(约 11%),并少约 4000 次临时文件写盘。 同时记录三个待追查项:命中率为何只有 54%、StringToRegion 为何比 RegionAcisIn 贵一倍、 开图期间为何回写 1140 次 SAT。 文档里补充了"用管子属性做 key"的思路与风险:属性相同则截面相同,业务上成立, 但不能单独当 key——DWG 里的 SAT 文本可能来自旧版本/旧路径/手工编辑的异形截面, 属性漏一项就会静默复用错误几何。若要做,采用 L1 内容 hash + L2 属性 key 的两级结构, L2 命中后仍比对 textHash,不一致按 miss 处理;落地前先加一路属性 key 命中率计数比较。 另外新增 tools/run_acad_perf.ps1 并在 AGENTS.md 记录本机 CAD 实测环境: acad.exe 路径、/p SHS-ENVI2026 启动参数、测试图纸、部署目录, 以及"PowerShell 5.1 把无 BOM 的 UTF-8 当 ANSI 读"这个坑(脚本保持 ASCII)。 验证:文档与脚本;脚本语法检查通过,本次实测就是用它的等价命令跑出来的。
4.0 KiB
4.0 KiB
AGENTS.md — Envi3D 2026(环境设计)
本文件由 pi 自动加载。完整的项目说明在 CODEBUDDY.md(构建、preset、加密双版本、模块分组、架构分层)。
动手改代码前先 read CODEBUDDY.md。这里只放 pi 环境差异和硬性红线。
pi 环境说明
- 内置工具只有
read/write/edit/bash,没有独立的 grep / glob / web 工具: 搜索一律在bash里用rg,联网靠curl或额外插件。 - 超长文件用
read的offset/limit分段读:AecDbEwFitting.cpp17453 行、AecDbEwEquipment.cpp14290 行、AecDbEwPipe.cpp5002 行。 - 类名与文件名不一定一致,搜之前先
rg -n "ACRX_DXF_DEFINE_MEMBERS" <文件>确认 (例:AecDbSlab.cpp里的类叫AecDbXSlab)。
红线(违反了会污染仓库或造成不可逆损坏)
- 源码编码:
SourceCode/Code2026/**/*.cpp|*.h必须是 UTF-8 with BOM;cmakelists.txt/CMakeLists.txt保持 ASCII 无 BOM。 中文写坏不可逆,只能git checkout HEAD -- <file>还原后重做。 - 禁止新增或依赖
.vcxproj/.sln(StartApp/StartApp.sln是唯一例外)。cmake_output/下的*.vcxproj是构建产物,不要提交。 - 不要直推
main,推送走git push origin HEAD:refs/for/main/<分支名>触发评审。 - commit message 用中文。
- 文件内私有函数放该文件已有的匿名
namespace;不要写文件级static,不要放头文件。 - 平台判断用
#ifdef ZWCAD,不要只比较ARX版本号(ZRX 的ARX宏与 AutoCAD R 版本数值重叠)。 Arx/、ZRX/、bin/、lib/、cmake_output/已被 gitignore,不要手动加进来。
动手前
- 本仓库没有单元测试框架、没有 lint 配置:验证方式 = 编对应 preset + 在 CAD 里加载实测。
- 大改动先读仓库根目录已有的分析文档(
*-review.md/*-plan.md/*-analysis.md), 里面记录了很多"已经决定不做"的理由,别重复踩。 - 构建命令与 target 对照见
CODEBUDDY.md,或直接用 skillbuild-arx。
自动化 CAD 实测
可以无人值守跑一次「开图 → 执行命令 → 收结果 → 关进程」。本机环境:
| 项 | 值 |
|---|---|
| AutoCAD | c:\Program Files\Autodesk\AutoCAD 2020\acad.exe(= R23.0,对应 preset R230) |
| 启动参数 | /p SHS-ENVI2026(试验用 profile,会自动加载本仓库的 arx) |
| 测试图纸 | e:\桌面\big1.dwg(约 8 MB,一次开图 ≈ 108 s) |
| 部署目录 | c:\ShangHuaSoft\Envi3D-2026-M\R230\(Debug 构建会自动部署到这里) |
一键脚本:tools/run_acad_perf.ps1
powershell -NoProfile -ExecutionPolicy Bypass -File tools\run_acad_perf.ps1
它的做法:写一个只含 ENVIPERFDUMP 的 .scr,用 /b 让 AutoCAD 在图纸载入完成后执行;
报告落 %TEMP%\aec_section_perf.txt;收完报告按 PID 结束本次拉起的 acad,
脚本里不写 QUIT,所以不会弹保存对话框、不会回写图纸。
写这类 .ps1 时注意:Windows PowerShell 5.1 把无 BOM 的 UTF-8 当 ANSI 读,
带中文会直接语法错误——要么保存为 UTF-8 with BOM,要么脚本全用 ASCII(推荐)。
需要用户决策时
不要把问题打在终端里就停住——先跑 tools/notify_decision.ps1(用 -MessageFile 传中文),
发完 toast 再结束本轮。细则见 skill notify-decision。
仓库内 skill
| skill | 用途 |
|---|---|
build-arx |
按 preset 编译、单 target、产物与部署路径 |
verify-utf8 |
UTF-8 BOM 自检、写坏后的回滚 |
pr-flow |
分支命名 / 中文 commit / refs/for/main 推送 |
analyze-big-entity |
万行实体类的分析与改动套路 |
notify-decision |
需要用户拍板时主动推送通知(桌面 toast / IM 机器人),不让他干等终端 |
使用说明(常用命令、会话管理、Windows 终端问题、多机同步、插件取舍)见 pi-agent-setup.md。