feat: apply object placement during recompute

This commit is contained in:
2026-08-03 00:36:16 -04:00
parent 6bfbdf5057
commit 501f43f1c0
7 changed files with 169 additions and 12 deletions

View File

@@ -1,6 +1,6 @@
# Web FreeCAD 接续执行状态
更新时间2026-08-03P2 schema v5 编辑中暂停
更新时间2026-08-03对象 Placement 重算里程碑已提交,待远端认证后推送
## 1. 当前目标
@@ -10,9 +10,9 @@
- 分支:`main`
- 云仓库:`http://154.8.160.151:3000/wangdequan/Web_FreeCAD_Bitbybit.git`
- 最近已推送里程碑:`63446d5 docs: add continuation execution status`
-完整门禁:`./npmw run verify` 通过
- Facade 测试55/55 通过
- 最近已推送里程碑:`6bfbdf5 feat: add project recovery and resource governance`
-近已推送里程碑的完整门禁:`./npmw run verify` 通过
- 当前 Placement 里程碑验证:`./npmw run verify` 通过Facade 61/61diff/JSON 校验通过
- 生产构建:通过
- 本地开发地址:`http://127.0.0.1:5173/`
- 兼容真值表:`config/compatibility-matrix.json`
@@ -27,6 +27,7 @@
5. 椭圆/B-spline 领域模型;基础 TypeScript solver 对未支持曲线返回明确诊断。
6. 外部草图几何、稳定 TopoRef、持久化与 `topo-ref` DAG 依赖边。
7. Vector、Placement、LinkList/StringList 结构化属性合同Placement 深拷贝、校验、撤销、持久化和 UI 编辑器。
8. 对象级 Placement 重算:基本体/特征 Shape 生成后执行平移与轴角旋转;恒等变换跳过额外 Shape变换失败释放临时 Shape 并保留上一次有效缓存;保存后恢复的 Placement 可再次驱动重算。
相关提交按新到旧:
@@ -48,13 +49,13 @@
- Pattern 当前复制整个 Shape不是 FreeCAD 局部特征历史。
- Hole 固定原点/法向,尚无面定位、沉孔、锪孔、螺纹和完整孔标准。
- 拓扑历史来自签名保守回退,不是 OCCT/FreeCAD 原生 Generated/Modified/Deleted 历史。
- Placement 已进入文档属性,但尚未完整映射到所有特征执行器的 FreeCAD 局部坐标语义。
- Placement 已进入文档属性,并接入 Facade 的对象级 Shape 重算;尚未完整映射到 Body/Tip、Support、AttachmentOffset 或所有特征执行器的 FreeCAD 局部坐标语义。
- FCStd 仍以安全预检、metadata/proxy 和只读报告为主,尚未双向原生往返。
## 5. 下一步执行顺序
1. 完成 P2 持久化门禁1000 次事务压力、迁移失败回滚、资源配额/垃圾回收、崩溃恢复点
2. 将对象 Placement 可靠接入 Part 基本体与可兼容特征的 OCCT 重算,补包围盒/撤销/保存黄金测试
1. 补齐 P2 浏览器实证门禁:真实 SQLite v4→v5 升级、OPFS 孤儿清扫、QuotaExceeded、大文件和崩溃注入合同层与 fallback 测试已由 `6bfbdf5` 完成
2. 补齐 P3-03 浏览器 OCCT 包围盒/体积黄金测试,并验证 Placement 撤销保存和恢复的真实 Worker 路径Node/fallback 合同已通过
3. 继续 TSN把拓扑快照和历史结果接入实际重算 generation迁移外部几何与 LinkSub暴露 ambiguous/deleted 修复流程。
4. 在获得 FreeCAD `1.1.1` 源码/构建输入后完成 `SK-03` planegcs WASM POC此前继续补充回放夹具、约束分类和 Sketch 编辑事务。
5. 扩展 PartDesignMirrored、MultiTransform、Loft/Pipe/Groove、Thickness/Draft以及 Pattern/Hole 完整语义。
@@ -80,8 +81,28 @@ git log -5 --oneline
## 7. 2026-08-03 P2 接续进展
本轮已完成 schema v5 迁移运行器、最近 5 版文档检查点、`loadCheckpoint()`、配额预检、资源清扫计划/API 和 1000 次写队列压力实现。聚焦测试与生产构建已通过;提交前仍需运行完整 `./npmw run verify` 和 JSON/diff 校验
本轮已完成 schema v5 迁移运行器、最近 5 版文档检查点、`loadCheckpoint()`、配额预检、资源清扫计划/API 和 1000 次写队列压力实现。完整门禁已通过,并由提交 `6bfbdf5` 推送到云仓库
证据边界Node/fallback 证明迁移合同、队列、检查点与纯资源策略;真实浏览器 SQLite v4→v5 升级、OPFS 孤儿清扫、QuotaExceeded、大文件与崩溃注入仍是 P2/P8 后续任务,不能因本轮测试而标记完整 G4/G5。
本里程碑提交后,下一执行点为“将对象 Placement 接入 Part 基本体 OCCT 重算并建立包围盒/保存黄金测试”,随后回到 TSN generation 历史写回。
## 8. 2026-08-03 Placement 里程碑快照
Placement 里程碑涉及实现、测试、兼容矩阵和三份状态/方案文档:
- `src/facade/recomputeEngine.ts`Shape 生成成功后读取对象 `Placement`,通过 `geometry.applyPlacement()` 执行平移/轴角旋转;恒等 Placement 不创建额外 Shape成功后释放局部 Shape缓存只提交变换后的句柄。
- `tests/facade.test.ts`:新增非恒等 Placement 与恒等 Placement 的执行器测试。
- `docs/continuation-status.zh-CN.md``config/compatibility-matrix.json` 及两份实施方案:记录本里程碑的能力边界和验证证据。
已完成的当前工作区验证:
```text
./npmw run test:facade -> 61/61 通过
./npmw run build -> 通过
```
完整 `./npmw run verify``git diff --check``jq empty config/compatibility-matrix.json` 均已通过Placement 已作为独立里程碑提交。远端 HTTP 当前缺少可用用户名/凭据,`git push origin main` 未成功,待认证恢复后推送。
1. 浏览器 OCCT 包围盒黄金证据若无法自动化,保持 P3-03 为 `IN PROGRESS`
2. 接着推进 TSN generation 历史写回,不把签名回退误标为 OCCT 原生历史。
本里程碑不得声称 P3-03、F3 或完整 FreeCAD 兼容已经通过。当前对象 Placement 是 Shape 生成后的对象级变换,尚未证明 FreeCAD 对 Body/Tip、Support、AttachmentOffset 和局部坐标链的完整等价语义。