Files
FreeCADWasmDev/docs/current/partdesign-subtractive-delivery-20260911.md
wangdequan 9a7c4f0335 Save FreeCAD Web workspace sources and user validation evidence
IFC native binding remains incomplete; preserve accurate test results.
2026-09-15 22:01:58 +08:00

4.2 KiB
Raw Blame History

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 项为受影响的原有业务复验。 当前有效性仍由源码/产物指纹决定;不得把全局证据刷新计作新增业务。

修复的实际阻塞

  1. FCStd 恢复之前传入 delaySignal=true,Worker 却没有桌面 GUI 恢复协调器调用 afterRestore。文档一直处于恢复状态,打开用户文件后创建/编辑无法正常记录撤销。当前单文档 Worker 使用完整 restore(..., false, ...),保留 FreeCAD 自身的恢复流程。原生和浏览器测试均检查重开后的新事务、撤销重做,不假设历史撤销栈被保存。
  2. 重开后 Body 状态尚未同步,默认 Profile 选择覆盖了已恢复特征的 Profile。现在按下一 Body 的对象集合恢复依赖,截面和路径参数正确保留。
  3. 扫掠路径控件把当前选中的基体当成自身依赖排除了。现仅排除正在编辑的同类型目标,允许从基体选择原生路径边,非法循环仍由 native 拒绝。
  4. 完整恢复会触发真实重算,原旋转体回归的体积严格相等断言出现约 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/。