3.8 KiB
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_HANDOFF.md。
目标与边界
唯一产品基线是当前 checkout 的 FreeCAD 1.2,目标按源码完整对标,不以查看器或少量 Part 功能替代桌面能力。未实现能力保持 pending,只有 gate 能晋级里程碑。
必须满足:
- 每个任务只关闭一个可观察合同,失败可从日志和产物续接。
- 浏览器主线程只负责 UI/渲染,文档与几何运算在 Worker 串行执行。
- FreeCAD Document 是权威状态,前端状态只保存投影。
- 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。
目标架构
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/。