Files
FreeCADWasmDev/docs/current/FREECAD_WEB_MIGRATION_ANALYSIS.md
wangdequan 9a7c4f0335 Save FreeCAD Web workspace sources and user validation evidence
IFC native binding remains incomplete; preserve accurate test results.
2026-09-15 22:01:58 +08:00

3.8 KiB
Raw Blame History

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 能晋级里程碑。

必须满足:

  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。

目标架构

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/。