feat: add whole-shape mirrored feature

This commit is contained in:
2026-08-03 01:41:27 -04:00
parent 56903dbeb2
commit 4aa6ca48ad
11 changed files with 133 additions and 24 deletions

View File

@@ -1,6 +1,6 @@
# Web FreeCAD 接续执行状态
更新时间2026-08-03TopoRef 候选替换里程碑完成,待提交)
更新时间2026-08-03Mirrored whole-shape 里程碑完成,待提交)
## 1. 当前目标
@@ -10,9 +10,9 @@
- 分支:`main`
- 云仓库:`http://154.8.160.151:3000/wangdequan/Web_FreeCAD_Bitbybit.git`
- 最近已推送里程碑:`ffbe2c6 feat: persist generation topology history`
- 最近已推送里程碑:`56903db feat: resolve topology reference candidates`
- 最近已推送里程碑的完整门禁:`./npmw run verify` 通过
- 当前候选替换未提交工作区验证:`./npmw run verify` 通过Facade 64/64diff/JSON 校验与桌面/移动截图通过
- 当前 Mirrored 未提交工作区验证:`./npmw run verify` 通过Facade 65/65diff/JSON 校验通过
- 生产构建:通过
- 本地开发地址:`http://127.0.0.1:5173/`
- 兼容真值表:`config/compatibility-matrix.json`
@@ -30,6 +30,7 @@
8. 对象级 Placement 重算:基本体/特征 Shape 生成后执行平移与轴角旋转;恒等变换跳过额外 Shape变换失败释放临时 Shape 并保留上一次有效缓存;保存后恢复的 Placement 可再次驱动重算。
9. TSN generation 写回:重算成功后采集面/边/点签名快照与保守历史;迁移 LinkSub/草图外部几何歧义或删除引用标脏所有者并生成可定位诊断schema v6 保存对象拓扑快照。
10. TopoRef 候选替换事务:属性面板/诊断页从源对象当前同 kind 拓扑候选中原子替换 LinkSub 或外部几何引用,重建 DAG、标脏重算并支持 Undo/Redo。
11. Mirrored whole-shapeFacade 暴露 OCCT 平面法向镜像PartDesign Task 支持 XY/XZ/YZ 原点平面与可选 Fuse重算释放 union 临时副本并写回 Shape/拓扑 generation。
相关提交按新到旧:
@@ -60,7 +61,7 @@
2. 补齐 P3-03 浏览器 OCCT 包围盒/体积黄金测试,并验证 Placement 撤销、保存和恢复的真实 Worker 路径Node/fallback 合同已通过。
3. 为 ambiguous/deleted TopoRef 补 3D 候选高亮,并增加真实 OCCT/SQLite 浏览器回放;候选替换 Facade 事务和属性/诊断 UI 已进入当前里程碑。
4. 在获得 FreeCAD `1.1.1` 源码/构建输入后完成 `SK-03` planegcs WASM POC此前继续补充回放夹具、约束分类和 Sketch 编辑事务。
5. 扩展 PartDesignMirrored、MultiTransformLoft/Pipe/Groove、Thickness/Draft以及 Pattern/Hole 完整语义。
5. 扩展 PartDesignMultiTransform 建立有序变换列表合同,再推进 Loft/Pipe/Groove、Thickness/Draft以及 Mirrored/Pattern/Hole 的局部特征历史与完整语义。
6. 完成 FCStd 原生对象/属性/Shape 双向映射和 STEP/IGES/STL/Web CAD 包导入导出。
7. 按核心优先级完成 TechDraw、Spreadsheet、Draft、Assembly、BIM、Mesh、Surface、FEM、CAM 等工作台。
8. 最后通过跨浏览器、性能、内存、安全、可访问性、离线/PWA、升级回滚和发布差异报告门禁。
@@ -124,6 +125,13 @@ Placement 里程碑涉及实现、测试、兼容矩阵和三份状态/方案文
- 属性面板对 ambiguous/deleted LinkSub 显示候选菜单;诊断页对 LinkSub 和草图外部几何显示候选替换控件。非法候选拒绝,不修改文档。
- 完整 `./npmw run verify`、diff/JSON 校验通过Chrome 桌面/移动布局无重叠SwiftShader 延时截图确认 OCCT canvas 非空;提交和推送仍待执行。
尚未完成 3D 面/边/点候选预选与高亮,也没有真实 OCCT 浏览器黄金回放,因此 TSN-09/F3 仍保持进行中。
尚未完成 3D 面/边/点候选预选与高亮,也没有真实 OCCT 浏览器黄金回放,因此 TSN-09/F3 仍保持进行中。候选替换里程碑已由 `56903db` 推送。
## 11. 2026-08-03 Mirrored whole-shape 快照
- `geometry.mirror()` 对文档/Shape 句柄、原点和非零法向做 Facade 校验,再调用 Bitbybit `mirrorAlongNormal()`
- `PartDesign::Mirrored` 文档对象保存 Base、Plane 与 FuseTask 更新 Body.Tip 和 DAG。重算按 XY/XZ/YZ 映射法向Fuse 时 union Base 与镜像副本,并始终释放临时副本。
- 当前是整 Shape 镜像,不是 FreeCAD 对选中特征历史的镜像;平面固定经过文档原点,未接 DatumPlane/Sketch axis/TopoRef 支持,也未证明单实体规则。
- 完整 `./npmw run verify`、diff/JSON 校验通过;提交和推送仍待执行。
本里程碑不得声称 P3-03、F3 或完整 FreeCAD 兼容已经通过。当前对象 Placement 是 Shape 生成后的对象级变换,尚未证明 FreeCAD 对 Body/Tip、Support、AttachmentOffset 和局部坐标链的完整等价语义。

View File

@@ -318,6 +318,8 @@ Bitbybit 的 OCCT `filletEdges` 与 `chamferEdges` 已进入 Geometry Facade
Geometry Facade 还接入了 Bitbybit IO 的 STEP 和 ASCII STL 导出,作为 FC-08/FC-09 的第一条交换格式垂直切片。导出数据仍只代表当前 Shape对象树、Expression、Sketch 约束、TopoRef 和重算历史必须由 FCStd/.webcad 格式任务独立保存,不能因“能导出 STEP”而宣称参数化文件兼容。
PartDesign Mirrored 已形成 experimental whole-shape 垂直切片Facade 验证并调用 OCCT 平面法向镜像,文档对象/Task 保存 Base、XY/XZ/YZ 原点平面和 Fuse重算 union 后释放临时副本并进入 generation 拓扑写回。这不是 FreeCAD 局部特征历史镜像DatumPlane/Sketch axis/TopoRef 平面、单实体规则、跨 Body 支持和 Mirrored 的原生历史映射仍未完成。
本轮又补齐了拓扑和恢复边界:面之外增加了由 BitBybit 网格端点派生的 edge/vertex 签名,并通过 `geometry.topology()` 返回面/边/点引用,签名使用量化坐标、长度/端点而不使用面索引;这仍不是 OCCT `Generated/Modified/Deleted` 历史。FCStd inspection 现在同时生成只读 `proxyDocument`,对象属性带有 `recognized/proxy/blocked` 状态SQLite/OPFS Project API 增加 `recovery(documentId)`报告完整性、schema、最后保存版本和降级警告。持久化写入现在在支持的浏览器使用 Web Locks 跨标签页互斥,并通过 BroadcastChannel 广播保存版本;无 Web Locks 环境明确报告 `local-queue`,不能解释为跨标签页安全。代理文档和恢复报告都不能被解释为 FCStd 参数化写回或崩溃恢复已经完成。
## 17. 本轮后续实现记录与下一批任务

View File

@@ -1605,9 +1605,9 @@ P0 基线/治理
| P3-02 几何句柄与网格协议 | `IN PROGRESS` | Facade 已定义并实现受控 `ShapeHandle``MeshAsset``SubshapeRef` 类型;成功 generation 写入对象拓扑快照、迁移 matches 和保守历史;重算自动迁移 LinkSub/外部几何,歧义/删除保持显式状态和诊断;候选替换事务只接受源对象最新同 kind persistentId属性/诊断 UI 可提交并支持 Undo/Redo。OCCT 原生历史、邻接/曲率签名、跨 Boolean 映射和 3D 候选高亮仍未实现 |
| P3-03 基本体和变换 | `IN PROGRESS` | 真实 OCCT Box/Cylinder/Sphere/Cone 和浏览器矩阵已验证基础 PlacementFacade 重算 executor 现在对对象 Placement 做严格结构校验,在 Shape 生成后执行平移/轴角旋转,恒等变换跳过额外句柄,失败时释放临时 Shape 并保留最近有效缓存Node/fallback 已覆盖失败释放、畸形输入和保存恢复。0.05 mm 网格精度下曲面包围盒最大离散误差约 0.023 mm自动化浏览器黄金/体积测试尚未进入 CI |
| P3-04 Boolean/Pad/Pocket/Revolution | `IN PROGRESS` | 文档作用域 Union/Cut/Intersection 与 PlanarProfile 驱动的 Pad/Pocket/Revolution 已通过真实 OCCT 浏览器矩阵;重算 executor 已在 Worker ready 时执行 Pad/Pocket/RevolutionRevolution Angle/Reversed 已接入Fillet/Chamfer 也有 Shape 缓存回写Up to face、FCStd Shape 持久化仍待完成 |
| P3-05 Fillet/Chamfer/Pattern/Hole | `IN PROGRESS` | Fillet/Chamfer 已接入 Shape 缓存Linear/Polar Pattern 已贯通选择谓词、Task、Placement/union 和清理;基础 Hole 用圆形 Profile 复用 Pocket支持 Diameter、Depth、Dimension/Through all。Pattern 当前整 ShapeHole 当前固定原点法向;局部特征历史、连接单实体过滤、稳定 TopoRef、草图/面定位及沉孔/锪孔/螺纹仍待实现 |
| P3-05 Fillet/Chamfer/Mirrored/Pattern/Hole | `IN PROGRESS` | Fillet/Chamfer 已接入 Shape 缓存;Mirrored 使用 OCCT plane-normal mirrorTask 支持 XY/XZ/YZ 原点平面和可选 FuseLinear/Polar Pattern 已贯通 Placement/union基础 Hole 支持 Diameter、Depth、Dimension/Through all。Mirrored/Pattern 当前操作整 ShapeHole 固定原点法向;局部特征历史、Datum/TopoRef 平面、连接单实体过滤及完整孔语义仍待实现 |
| P5-02 网格增量接入 | `IN PROGRESS` | Three Adapter 可用 `BufferGeometry` 接收 Facade `MeshAsset`,替换时释放旧 GPU geometry视口优先使用重计算缓存的对象 Shape失败时保留最近有效结果无缓存时才创建并释放 Pad/Pocket 临时预览链;对象级增量缓存与选择映射尚未实现 |
| P8-01 第一批自动化场景 | `IN PROGRESS` | `tests/facade.test.ts` 已覆盖 64 个场景,包括 Part/PartDesignPattern/Hole、TopoRef/LinkSub、generation 拓扑快照/迁移/候选替换、Sketch provider、几何重算、诊断修复、FCStd 安全、schema migration、1000 次写队列、检查点和资源治理E2E/黄金几何待补齐 |
| P8-01 第一批自动化场景 | `IN PROGRESS` | `tests/facade.test.ts` 已覆盖 65 个场景,包括 Part/PartDesign Mirrored/Pattern/Hole、TopoRef generation/候选替换、Sketch provider、几何重算、诊断修复、FCStd 安全、schema migration、1000 次写队列、检查点和资源治理E2E/黄金几何待补齐 |
本迭代验证命令:`npm run check:facade-boundary``npm run test:facade``npm run build`。构建产物将 Three.js 拆为独立 chunk避免把全部渲染库重复打入应用主 chunk。当前 npm registry 的 `three` 最新版本为 `0.185.1`,已在 `package.json` 和运行时基线中锁定。下一迭代继续完成 P0-01/P0-02 的精确锁定、P2-01/P2-02 的 SQLite/OPFS schema 与 Worker 单写者实验,以及 P3-01 的 FreeCAD/OCCT WASM 构建验证。