Files
FreeCADWasmDev/docs/current/part-boolean-delivery.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

52 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 当前文档布尔建模交付与解阻
2026-09-09 11:24。本轮新增主工作区并集、差集、交集三项业务,复用现有 DocumentProbe、Part 原生特征和已提供 OCCT 库,未重编译 OCCT。当前有效验收 93/1503,剩余 1410;开始时为 87,净增 6 包含后台业务,不能全部归为本次布尔交付。
## 实际交付
- `part.document/setBoolean` 创建或编辑原生 `Part::Fuse/Cut/Common`,保留 Base/Tool 链接。移动、修改源对象由 FreeCAD 重算;材料标识随源对象继承并通过 FCStd 重开确认。
- React 主工作区提供布尔模式、操作数选择/交换、创建/更新、XYZ 平移、原生撤销重做。Three.js 只显示 OCCT 网格;生成结果时隐藏操作数,删除或撤销结果后恢复显示。
- 复用 FCStd/OPFS 保存路径。刷新浏览器、重开文件、修改操作数后仍能重算。无效对象、自引用、间接循环、删除被引用对象、原生重算失败均检查原文档不变。
- 不相交的 Common 返回空结果并清除旧显示网格,移动后可恢复。1440x1000、390x844 的截图、像素和旋转交互检查通过。
## 已修复
1. 共用 `FCBRepAlgoAPI_BooleanOperation::Build` 在同步 WASM Worker 内强制并行,首个并集不返回。WASM 分支改为 OCCT 串行,桌面行为不变。
2. `FeaturePartBoolean.cpp` 原来未编译 `-fexceptions`,局部 catch 未生效。沿用 AttachExtension 的按源文件配置,并保留原生阶段和文档对象错误描述。
3. 现有 Web `Part::Feature` 默认空材质,`copyMaterial` 却仍查桌面默认材质目录,几何完成后失败。Web 空材质现在继承源对象原生材质,非空材质保留;桌面分支不变。
4. 产物复制曾暴露半个 WASM,实际出现 `Code section extends past end`。新增同目录唯一临时文件复制及原子 rename;失败保留旧文件并清理临时文件。这是单文件原子发布,不是整组 JS/WASM/data 的跨文件事务。
本轮不是一次构建完成:通用错误、编译端禁用 catch 和同步调用无法响应 TERM 导致多次诊断与重链接。后续先检查实际编译选项,再加阶段诊断;同步 WASM 复现命令使用 `timeout -k 3s`,不能只发 TERM 后空等。临时诊断进程均已结束,后台调度未暂停。
## 实测耗时
以下是测得步骤,不冒充整轮耗时。编译/链接为当前 `.ninja_log` 最后有效记录,业务耗时来自实际报告。
| 步骤 | 秒 |
|---|---:|
| 布尔包装器编译 | 2.452 |
| Boolean 特征编译 | 3.844 |
| PartFeature 编译 | 8.180 |
| DocumentProbe 编译 | 7.072 |
| DocumentProbe 最后一次链接 | 25.809 |
| public 产物同步 | 1.248 |
| 前端发布构建,包含 public 同步 | 8.740 |
| Part 新旧 18 项正式确认 | 60.450 |
| Web 工作区 10 项正式确认 | 18.194 |
| 共用分发器变化后 17 模块、59 项旧成功结果复验 | 68.614 |
| 相同三项布尔证据复用 | 0.059 |
正式 Common/Cut/Fuse 首次调用分别为 0.428/0.323/0.399 秒;完整原生组为 2.869/2.628/2.974 秒,浏览器组为 6.275/8.541/7.817 秒。共享 WASM 加载 0.322 秒只发生一次,不能把每组展示的该值相加。逐次成功/失败、动作及耗时在证据 `nativeTiming` 中。
## 证据与续接
- Part 18 项发布版报告:`business-evidence/eb1b2752c41ee3d6720af21a-20260909T031523846110.json`。
- 后台修改共用分发器后,三项布尔当前报告:`business-evidence/40f7e81b0f093ac994f19abe-20260909T031740283356.json`;Part 五项刷新:`business-evidence/92b4c4e6273198569ab553ea-20260909T032209137983.json`。历史报告保留,当前有效性由账本和指纹判定。
- Web 10 项报告:`business-evidence/815a9219e10b1a8b04f5db32-20260909T031508329442.json`。
- Facade、路由、几何边界、原子发布 21 个检查通过;TypeScript、几何边界审计和发布构建通过。
- 截图:`part-booleans-browser/{Fuse,Cut,Common}-{1440,390}.png`。入口 `http://localhost:5180/`,发布预览 `http://localhost:5181/`。
共用分发器的一次修改使很多模块旧证据失效。本轮直接批量执行已有用例恢复,没有改写历史通过标记,59 项复验不算新功能。共享入口修改应集中,稳定后直接执行已有成功组,不重新安排实现模型回合;模块适配尽量留在模块所有者文件,减少不必要的共用文件变更。
继续既定 Sketcher/PartDesign 当前用户文档主线。本次交付不等于全部布尔对话框、完整旋转 Placement、所有工作台路由或全项目唯一 WASM 实例已完成。