4.2 KiB
PartDesign 减料放样与扫掠交付
日期:2026-09-11,Asia/Shanghai。新增业务为
PartDesign:desktop:PartDesign_SubtractiveLoft 和
PartDesign:desktop:PartDesign_SubtractivePipe。
复用与结果
- 复用本机
FeatureLoft、FeaturePipe中的 Subtractive 类和 AppPartDesign 原生注册;沿用PartDesignDocumentWorkflow.cpp的 Body、Profile、Sections、Spine、事务和 OCCT 几何实现。 - 沿用现有 PartDesign WASM、
partdesign.worker.ts、文档 Facade、模块适配器及 React 工作区。只编译文档适配文件并增量链接原有目标,不重新编译 OCCT,不新增模块或几何算法。 - React 增加减料类型按钮、截面多选、路径/原生边选择及参数恢复。运算结果由 FreeCAD/OCCT 返回,Three.js 只显示 native 网格。
- 每项 13 个真实业务用例:减料体积、草图或基体编辑、Body Tip 和对象依赖、非法输入回滚、文档隔离、撤销重做、FCStd 后继续编辑、真实页面和 OPFS 重开、桌面/手机画布及旋转交互。
最终模块回归证据:
docs/current/business-evidence/a6c63fcfefde9127c8f501ff-20260910T223621586762.json。
PartDesign 合同 17 项全部通过,其中 2 项为本轮首次验收,15 项为受影响的原有业务复验。
当前有效性仍由源码/产物指纹决定;不得把全局证据刷新计作新增业务。
修复的实际阻塞
- FCStd 恢复之前传入
delaySignal=true,Worker 却没有桌面 GUI 恢复协调器调用afterRestore。文档一直处于恢复状态,打开用户文件后创建/编辑无法正常记录撤销。当前单文档 Worker 使用完整restore(..., false, ...),保留 FreeCAD 自身的恢复流程。原生和浏览器测试均检查重开后的新事务、撤销重做,不假设历史撤销栈被保存。 - 重开后 Body 状态尚未同步,默认 Profile 选择覆盖了已恢复特征的 Profile。现在按下一 Body 的对象集合恢复依赖,截面和路径参数正确保留。
- 扫掠路径控件把当前选中的基体当成自身依赖排除了。现仅排除正在编辑的同类型目标,允许从基体选择原生路径边,非法循环仍由 native 拒绝。
- 完整恢复会触发真实重算,原旋转体回归的体积严格相等断言出现约 3e-14 尾差。只对体积使用已有 1e-5 几何容差;类型、对象、参数和依赖保持严格比较。
分步耗时
| 步骤 | 实测 |
|---|---|
| 第一次文档适配编译 / 增量链接 | 9.790 / 32.425 秒 |
| 恢复生命周期修复后的编译 / 链接 | 9.697 / 31.886 秒 |
| 配套产物同步 | 2.945 秒 |
| 两项新业务首次完整通过 | 29.459 秒 |
| 其中共享 WASM 加载 | 0.447 秒,只初始化一次 |
| 放样 native/Worker / 页面与 OPFS | 6.049 / 8.902 秒 |
| 扫掠 native/Worker / 页面与 OPFS | 4.703 / 8.286 秒 |
| 最终受影响 PartDesign 17 项回归 | 117.750 秒 |
| 同源码/产物的 17 项证据复用复验 | 0.749 秒,原证据不重写 |
| 类型、消息和参数单测 | 12 项通过,约 0.45 秒 |
| 证据复用、选批和交付规划回归 | 43 项通过,7.663 秒 |
| 完整 Vite 生产构建 | 111 秒,其中公共目录复制约 110 秒 |
编译和链接耗时来自现有 configure/.ninja_log,WASM/业务耗时来自执行报告;不是估算的全项目提速比例。生产构建成功,存在既有的大 chunk 警告。日常增量构建继续复用现有 FREECAD_WEB_FAST_LINK=ON 路径,避免在每个业务小批次做全量公共资源复制。
后续执行
复用已通过的 17 项,除指纹变化或新增故障外不要重复实施。下一轮按真实缺口扩展现有特征执行模型,先最小 native 输入,再实际 UI/OPFS;源码已经有类、但文档适配没有入口时补入口,不只增添 exposed 标记。新覆盖在本地执行,不把模型服务等待当作无法做本地业务的理由。
本次覆盖直线矩形放样和单原生边圆形扫掠,不宣称任意路径、多截面全部高级参数、跨文档引用或完整桌面任务模式已通过。更复杂模式继续保留在完整移植范围。
工作区:http://localhost:5180/partdesign.html。
画布和参数面板截图:docs/current/partdesign-subtractive-browser/。