74 lines
3.8 KiB
Markdown
74 lines
3.8 KiB
Markdown
# FreeCAD 1.2 Web/WASM 技术基线
|
||
|
||
## 执行铁律
|
||
|
||
- 浏览器测试只执行 Google Chrome(桌面 Chrome 或 Chrome 移动设备仿真);Firefox、WebKit 和 Safari 不执行、不纳入当前矩阵、不作为发布阻断项。
|
||
- 既有 Firefox/WebKit/Safari 记录只作历史追溯,不能作为当前 Chrome 通过或失败的替代证据。
|
||
- 每个浏览器任务卡必须明确 Chrome 版本、运行模式、viewport 和证据文件;若 Chrome 不可用,任务应保留首个环境错误并停止,不切换到其他浏览器掩盖缺口。
|
||
|
||
> 稳定背景文档。执行者通常不需要通读本文件;先读当前任务卡和直接前置证据。
|
||
> 上下文预算与状态协议见 [`FREECAD_WEB_CONTEXT_PROTOCOL.md`](FREECAD_WEB_CONTEXT_PROTOCOL.md);当前续接见 [`FREECAD_WEB_HANDOFF.md`](FREECAD_WEB_HANDOFF.md)。
|
||
|
||
## 目标与边界
|
||
|
||
唯一产品基线是当前 checkout 的 FreeCAD 1.2,目标按源码完整对标,不以查看器或少量 Part 功能替代桌面能力。未实现能力保持 `pending`,只有 gate 能晋级里程碑。
|
||
|
||
必须满足:
|
||
|
||
1. 每个任务只关闭一个可观察合同,失败可从日志和产物续接。
|
||
2. 浏览器主线程只负责 UI/渲染,文档与几何运算在 Worker 串行执行。
|
||
3. FreeCAD Document 是权威状态,前端状态只保存投影。
|
||
4. FCStd 是主文档格式,OPFS/缓存不改变文件语义。
|
||
|
||
## 源码与依赖基线
|
||
|
||
| 项目 | 值 |
|
||
|---|---|
|
||
| 源码 | `FreeCAD/freecad-source` |
|
||
| revision | `4f4e9244e613ea2df06e70027074a562695048cb` |
|
||
| CMake | `1.2.0dev` |
|
||
| OCCT / Qt / Python / Coin3D | `7.6.3 / 5.15.13 / 3.12.3 / 4.0.2` |
|
||
| Emscripten | `3.1.6` |
|
||
| 依赖锁定 | `FreeCAD/FreeCADBaseLib/sources.lock.tsv` |
|
||
|
||
已验证:OCCT、QtCore/QtXml、CPython、PyCXX、XercesC、zlib、Boost 具备 WASM 静态产物;FreeCADBase/App/Part/PartDesign/Sketcher 核心归档可构建;STEP、Worker、Three.js、OPFS、网格缓存通过 P1;Part 类型和 Document 生命周期通过 P2.1/P2.2;FCStd、事务、Undo/Redo 和中断恢复通过 P2.3。
|
||
|
||
## 目标架构
|
||
|
||
```text
|
||
Browser UI (React/TypeScript + Three.js)
|
||
|
|
||
v
|
||
Typed FreeCADWebFacade messages
|
||
|
|
||
v
|
||
Dedicated Kernel Worker (Document actor -> C++/OCCT WASM)
|
||
|
|
||
v
|
||
OPFS (FCStd, imports, recovery, mesh cache)
|
||
```
|
||
|
||
- 一个文档只由一个 Worker 修改;消息按 request id 在单一队列顺序执行。
|
||
- C ABI 只暴露稳定句柄、值类型和错误字符串;JS 不持有原生指针。
|
||
- 网格使用 transferable typed arrays;B-Rep 和 Document 留在 Worker。
|
||
- 缓存失败不得阻断导入或重算。
|
||
|
||
## 构建与合同边界
|
||
|
||
`FREECAD_WEB` 是显式入口,桌面默认配置不变。最小闭包为 `FreeCADBase`、`FreeCADApp`、`Materials`、`Part`、`PartDesign`、`Sketcher`、`Import`、`Measure`。新增模块按“依赖 probe -> 静态注册 -> C ABI contract -> 浏览器 slice -> gate”进入。
|
||
|
||
运行时合同包括:C++/OCCT 异常固定错误返回、幂等初始化、整数句柄、稳定类型/属性校验、FCStd 临时文件校验后原子替换、导入参数与源文件 hash 绑定。P2 只提供 Document 生命周期所需的嵌入 Python;P4 才建立受限 Python Worker、静态工作台注册和插件包格式,不承诺 PySide/Pivy/桌面动态模块直接可用。
|
||
|
||
## 风险控制
|
||
|
||
| 风险 | 必须留下的证据 |
|
||
|---|---|
|
||
| Python/Qt 隐式依赖 | 链接与运行时 probe |
|
||
| 类型重复注册 | 幂等计数与多次调用 smoke |
|
||
| FCStd 损坏 | 保存、关闭、重开、对象/属性校验 |
|
||
| 拓扑漂移 | 稳定 id、子元素映射、回归模型 |
|
||
| 浏览器内存/卡顿 | 初始、增长、峰值、释放和 Worker 性能预算 |
|
||
| 工作台遗漏 | 源码生成的 P3 对标矩阵 |
|
||
|
||
历史调查和早期任务记录:`FreeCAD/docs/archive/`。
|