4.9 KiB
OCCT 几何出口与显示边界
2026-09-09 核对。用户要求是固定执行边界,不是新建另一套 CAD:OCCT WASM 已提供,几何算法统一到这一内核出口;Three.js 只负责显示,优先复用现成产物。
2026-09-12 强制补充:模型算法来源于 OCCT WASM 唯一接口。凡是权威几何、拓扑、布尔、曲面、网格化结果,必须有实际 OCCT WASM 调用链;FreeCAD WASM 只负责文档与特征语义,Three.js 不得生成权威模型。静态链接、WASM 文件存在或前端显示不构成调用链证明。
职责
| 层 | 必须负责 | 不得替代 |
|---|---|---|
| OCCT WASM | CAD 几何、拓扑、布尔、曲面及原生几何网格化 | 不新增第二套几何内核,不用前端近似结果冒充 |
| FreeCAD WASM | 桌面文档、对象、特征、约束、事务和格式业务适配,衔接 OCCT | 不把文档/对象语义删掉后换成固定模型 |
| Facade / Worker | 参数校验、路由、取消、错误、序列化和资源生命周期 | 不实现替代 CAD 算法,不跨独立 WASM 传原生指针 |
| Three.js | 显示 native 网格、材质、光照、相机、拾取、显示裁剪与高亮 | 不用 CSG、ExtrudeGeometry 等生成权威 CAD 结果 |
| React / OPFS | 交互编排 / 实际文档文件持久化 | 不用页面状态或 localStorage 元数据冒充 native 文档保存 |
显示用的 Vector、Box3、Raycaster、包围球计算不等于另建几何内核。显示裁剪不能冒充真实切割,显示网格不能冒充 BREP/特征树。TechDraw 原生二维 SVG 作为显示结果使用,不由浏览器重算投影几何。
已核对的实际链路
| 业务 | 当前执行链 | 显示边界 |
|---|---|---|
| 既有 STEP 查看 | main.ts → kernel.worker.ts → FreeCADWebKernel → FreeCADWebBridge.cpp 的 OCCT STEP/BRep/网格化 |
native positions/normals → BufferGeometry |
| 默认工作区文档 | project-shell.tsx → 模块路由 → part-save.worker.ts → DocumentProbe → FreeCAD Part/OCCT |
documentObjectMesh 校验并打包 native 网格,Three.js 显示 |
| Part 参数业务 | part-facade.ts → part.worker.ts → PartBoxProbe → 原生 Part/OCCT |
结果、体积由 native 返回,不由 JS 尺寸乘积充当计算结果 |
| TechDraw 当前文档 | 生成路由 → 同一 techdraw-python.worker.ts → 已有 TechDraw runtime/OCCT 依赖 |
native SVG/图像显示;创建、任务、保存不跨文档实例 |
现成 web/public/kernel/FreeCADWebKernel.js 为 165701 字节,.wasm 为 15206151 字节。本次检查了存在性、WASM 文件头及对应源码调用,没有重新编译或上传源码。现有模块 manifest 和已核对的构建目录仍是唯一产物选择依据,不新增重复注册表。
当前不能宣称的部分
- 当前架构有多个独立模块 WASM。复用同一 OCCT 技术与拥有同一个统一运行实例是两回事,不能仅凭静态链接就宣称所有几何入口已经统一。
- Mesh/STL 等路径还含 FreeCAD 原生 Mesh 读写或格式适配。必须按真实业务区分解析/适配与几何计算,核对实际 OCCT 调用和序列化交接;不能先删除这些已完成实现或以格式转换损失替代原生语义。
- 不强行拼接已编译 WASM,不擅自切换共享内存/side-module 架构。未核对的入口保留待贯通状态,后续只补明确缺口。
构建检查
cd web 后运行 npm run check:geometry-boundary;npm run build 的 prebuild 自动执行相同检查。
- 用 TypeScript AST 检查
web/src中的 TS/TSX/JS 模块;当前 364 个文件。 - Three.js 的运行时导入只允许在已核对的四个显示文件中;新增显示文件须先核对职责,再调整检查白名单。
- 拦截已知前端 CSG/替代内核导入及 Three.js 实体/拉伸造型构造器;相机、拾取、材质和 native BufferGeometry 保留。
- 缺少现成内核文件或 WASM 文件头不正确时失败,不自动重新编译内核。
本次检查无命中,耗时 0.371 秒;7 项正反例测试通过。检查报告显式保留 singleRuntimeVerified: false。静态检查不是完整调用图证明,不能排除所有动态生成代码或任意手写数学旁路,不能计作新增业务完成。具体业务仍需实际输入、原生调用、错误/取消和结果验证。
后续执行
每个几何业务工作包列明:现成产物、Facade/Worker、真实 native/OCCT 入口、对象归属、结果和显示消费位置。优先用既有实现和有效证据;缺接线补接线,缺断言补必要断言。只有产物缺失、相关依赖变化或原生首错要求修复时,才增量构建受影响模块。
复用规则和实际业务解阻证据分别见 WEB_BUSINESS_MIGRATION_RULES.md、current/part-mesh-business-unblock.md、current/techdraw-route-unblock.md。历史报告或检查通过不得覆盖用户的唯一几何出口要求。