P4: add expressions dependency recompute and topology signatures

This commit is contained in:
2026-08-02 09:40:26 -04:00
parent a9f4ff752d
commit 6a0bd534ea
14 changed files with 758 additions and 26 deletions

View File

@@ -303,3 +303,9 @@
## 15. 完成定义
“完整 FreeCAD 对标”只有在 F0-F9 全部阶段门通过、核心与扩展工作台均有兼容等级、稳定子形状命名/Sketcher/Expression/单位/DAG/重算/FCStd 均有黄金报告、跨浏览器和安全门禁通过,并且发布文档列出所有差异后才能使用。当前仓库仍处于核心 Facade、OCCT 几何和属性编辑的进行中阶段,下一工作目标按第 14 节执行。
## 16. 已实现切片与剩余边界
本轮已完成 `EXU-02..EXU-06` 的基础版本Quantity 以 mm/deg 等规范单位保存,表达式支持四则运算、对象属性引用和维度错误;已完成 `DAG-01..DAG-06` 的领域版本Link/Expression 边、下游传播、SCC 循环检测、稳定拓扑计划、generation 和 recompute 状态已进入 Facade 与 SQLite schema v3。还未把每个 DAG 节点接入真实 OCCT/Sketcher 计算 Worker因此当前是可验证的业务调度层不是完整几何重算。
TSN 已完成面级量化签名、唯一/重复候选判定和匹配 API并挂接到 Bitbybit `MeshAsset`。签名刻意不使用 transient `faceIndex`;但是它还没有 OCCT 历史 `Generated/Modified/Deleted` 信息,也没有边/顶点和跨特征布尔历史映射。TSN-03、TSN-05、TSN-07、TSN-08 仍是完成 FreeCAD 稳定子形状命名的必要任务。

View File

@@ -1698,7 +1698,20 @@ DocumentSnapshot 现在区分模型树投影与 `DocumentObjectSnapshot` 真值
持久化复用 schema v1 已有 `object_properties` 表:`value_json` 保存完整 Property snapshot`property_type` 保留可查询类型;删除/重写对象时依赖外键级联清理旧属性。内存降级、autosave、Undo/Redo 和 Facade state 均使用深拷贝,避免 options/property 数组共享引用。
当前限制Expression 只展示 metadata尚无解析/依赖求值Length 以文档 mm 基值保存,尚无 Quantity 单位换算PropertyLink 只校验本 Document 目标存在,未实现循环和删除传播;多选 mixed、批量编辑、重置默认值和属性搜索仍由 P4-02/P6-02 后续任务完成。属性变更只做轻量 Touched 标记,不在 UI 线程同步执行 OCCT 重计算。
当前限制Expression/Quantity 已完成基础词法、四则运算、长度/角度/百分比换算、对象属性引用和维度校验函数库、locale 规则、Spreadsheet alias 和完整 FreeCAD 表达式兼容仍待 EXU。PropertyLink、Expression 和下游对象现在进入统一依赖 DAG支持 SCC 循环诊断、拓扑重算计划和 schema v3 持久化;当前重算执行器仍是 Facade 领域切片,尚未把每个节点调度到 OCCT/Sketcher Worker。多选 mixed、批量编辑、重置默认值和属性搜索仍由 P4-02/P6-02 后续任务完成。
### 16.17 EXU/DAG/TSN 基础切片验证记录
| 检查 | 结果 | 证据 |
|---|---|---|
| Quantity 基础运算 | `PASS` | `1 in + 2 mm = 27.4 mm`;长度/角度相加、除零会结构化失败 |
| Property Expression | `PASS` | Pad Length 可保存 `1 in + 2 mm`Pocket 可引用 `pad.Length` 并生成 expression dependency |
| 依赖 DAG | `PASS` | `pad → pocket → fillet → body` 下游传播和稳定拓扑顺序均有测试 |
| 循环检测 | `PASS` | `pad.Length ↔ pocket.Length` 返回 `DEPENDENCY_CYCLE`,不提交伪造重算结果 |
| SQLite schema | `PASS` | schema v1→v2 增加 `recompute_json`v2→v3 增加 dependency property/reference 字段 |
| 子形状签名 | `PASS` | 面签名不使用 transient `faceIndex`;重复签名标记 `ambiguous`,唯一候选可匹配 |
尚未完成的 TSN 工作OCCT `Generated/Modified/Deleted` 历史捕获、跨布尔/特征的真实拓扑映射、面/边/顶点统一命名、附着和 `TopoRef` 文件迁移。当前签名是可审计的基础候选层,不能单独宣称 FreeCAD 稳定拓扑命名已完成。
### 16.16 引擎版本修复与完整 FreeCAD 对标专项