Files
Web_FreeCAD_Bitbybit/docs/freecad-cam-path-native-oracle.zh-CN.md

50 lines
4.8 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.
# FreeCAD CAM Path 原生 Oracle 实施说明
更新时间2026-08-07
这份说明覆盖浏览器 CAM 对标所需的三类原生证据FreeCAD Path 算法回放、Qt CAM 工作台动态状态、以及 `Path::Feature` / `Path::FeaturePython` 的 FCStd 保存与恢复。当前 Web 编辑边界是经 FreeCAD 重开验证的原生 `Path::Feature` 命令资源子集Python-backed 对象仍只读且不执行代码。
## 参考环境
- FreeCAD1.1.1,源码提交 `0108fd4b4850cc46e625b60e53cea7a7bbe69f8d`
- 构建:`.cache/freecad/install-desktop/bin/FreeCAD`
- GUI通过 `xvfb-run` 启动,`GuiUp=true`
- Qt运行时采集为 6.8.2
- CAM 模块:`PathApp.so``PathGui.so``PathSimulator.so` 均来自桌面构建
## 已完成的原生证据
| 能力 | 证据 | 状态 |
| --- | --- | --- |
| 原生 Profile 算法 | `Mod/CAM/CAMTests/test_profile.fcstd`,真实 `Path.Op.Profile` 覆盖工具补偿和无补偿两种场景;每种生成 32 条命令,其中 20 条切削命令;命令按 0.01 mm 数值容差规范化并锁定 SHA-256 | verified-2-scenarios |
| 原生 Helix 算法 | `Mod/CAM/CAMTests/test_holes00.fcstd`0.9 mm 刀具、9 个 base 子元素,覆盖 Inside/Outside 与 Climb/Conventional 四种组合;每种包含 1260 条原生 G2 或 G3 弧命令并验证 CW/CCW 方向 | verified-4-scenarios |
| Qt 动态 oracle | 激活 `CAMWorkbench`,读取 56 个实时 `CAM_*` 命令、QAction 文本/图标/快捷键/注册状态、菜单和工具栏;并通过真实 `setEdit()`、QDialogButtonBox OK/Cancel、14 个 Task 字段和关闭回放验证 Job/Profile Task 生命周期 | verified |
| 原生 Path FCStd | 创建 `Path::Feature``Path::FeaturePython`,保存、重开、修改路径和属性、再次保存并重开;`Path::PropertyPath`、5/6 条命令和标签均被 FreeCAD 恢复 | verified |
| Web Path 编辑与透明往返 | Facade 对 `Path::Feature` 解码/重写 `.nc` 资源;显式 `allowFeaturePython` 时也可对 `Path::FeaturePython` 只改 `.nc` 资源,追加命令后由 FreeCAD 重开验证 5→6 条;脚本和 XML 仍保持不执行/不改写 | verified-safe-resource-only-opt-in |
结构化结果在 [`config/freecad-cam-path-oracle.json`](../config/freecad-cam-path-oracle.json)。生成和校验脚本分别是 [`scripts/run-freecad-cam-path-oracle.ts`](../scripts/run-freecad-cam-path-oracle.ts)、[`scripts/freecad-cam-path-oracle.py`](../scripts/freecad-cam-path-oracle.py) 和 [`scripts/check-freecad-cam-path-oracle.mjs`](../scripts/check-freecad-cam-path-oracle.mjs)。
## 复跑和门禁
```bash
./npmw run probe:freecad-cam-path
./npmw run check:freecad-cam-path
./npmw run test:freecad-cam-path-report
```
`probe` 会在 `.cache/freecad/cam-path-oracle/` 生成源档案、变更档案和 Web 透明副本。报告中的 FCStd 完整性哈希是重开后 Path 对象语义哈希运行时仍比较透明副本和源档案的完整字节。Profile 命令使用 0.01 mm 规范化,避免 OCCT 在 1e-6 mm 级别的浮点抖动造成假差异。连续两次完整 probe 的报告语义结果稳定。
## 任务安排
| 任务 | 交付物 | 当前状态 | 后续验收 |
| --- | --- | --- | --- |
| ORA-CAM-PATH-01 | Profile/Helix 等 Path 算法原生 fixture 与规范化黄金 | in_progressProfile 2 场景 + Helix 4 场景) | 继续扩展 Drilling、Pocket、Surface 等工序的输入、失败和版本黄金 |
| ORA-CAM-PATH-02 | Qt 工作台命令、QAction、菜单、工具栏、选择上下文和 TaskPanel 生命周期采集器 | completed56 命令 + Job/Profile 生命周期) | 扩展更多工序的字段/校验/焦点黄金 |
| ORA-CAM-PATH-03 | 原生 `Path::Feature` / `Path::FeaturePython` FCStd 双向保存恢复 | completednative-native | 增加 Job、ToolController、SetupSheet 和 Dress-up 对象 |
| ORA-CAM-PATH-04 | Web Facade `Path::PropertyPath` 结构化解码/编码与可编辑事务 | completedPath::Feature + FeaturePython 安全资源 opt-in | 扩展 Job/Operation 对象、属性/重算语义和 Undo/Redo不宣称完整 operation-object 语义 |
| ORA-CAM-PATH-05 | FreeCAD Path 与 OpenCamLib/CAMotics 的连续差分 | pending | 版本锁定、同一 stock/tool/path 输入、体积/碰撞/时间差分 |
## 明确边界
当前 Web Facade 对 `Path::Feature` 提供结构化 `Path::PropertyPath` 解码/编码;对 `Path::FeaturePython` 只有显式 `allowFeaturePython: true` 才开放同样的资源级编辑。两者都只允许修改已有 native `.nc` 资源的命令列表,资源路径、版本和 Center 元数据保持不变XML、脚本和 Python 代码从不执行或改写,编辑后由 FreeCAD 重开验证。算法 oracle 当前只覆盖 2 个 Profile 场景和 4 个 Helix 场景;完整 Path 操作对象、FeaturePython 属性/重算语义、其余工序算法、Undo/Redo 和全量 Qt Task 行为仍未达到 exact parity整体报告的 `exactParityClaim=false`