Real IFC2X3/IFC4 import tested. Full BIM authoring/export remains out of scope; 349-second building import performance remains to optimize.
6.8 KiB
原剩余九项:修复、执行结果与未解决依赖
历史报告。2026-09-16 后续已接入真实 IFC 原生导入绑定并完成复测,详见 IFC 修复记录。以下保留当时的失败依据,不代表最新状态。
日期:2026-09-15。
结果
原九项均已编写真实浏览器测试并执行,8 项通过、1 项失败。这里的“已执行”不等于“全部通过”:FILE-02 的 IFC 原生导入仍失败,不能将其从验收范围删除。
- 最终轮:9 个案例,55 个步骤,101 张截图,证据文件无缺失。
- 案例累计耗时:173.194 秒。
- 手册累计最新结果:20 项通过、1 项失败;每项构建指纹分别记录在对应批次中,不能从累计结果推导 1452 条命令全量验收。
| 手册编号 | 结果 | 实际验证内容 | 秒 |
|---|---|---|---|
| GEO-01 | 通过 | Box 参数、体积 24、原生包围盒 [0,0,0]-[2,3,4] | 2.398 |
| FILE-03 | 通过 | 保存、下载、OPFS 重开、Std_Open 真实文件选择器打开下载 FCStd、完整恢复标志和场景 | 4.427 |
| DOC-02 | 通过 | Part 组合/移出/加入、文档 Tip、VarSet 变量、表达式求值及删除、FCStd 保存刷新重开 | 10.115 |
| DOC-03 | 通过 | 原生 Link 替换父引用、目标检查、撤销重做、保存重开和解除 | 8.963 |
| FILE-02 | 失败 | STEP、IGES、BREP、STL、DXF、OBJ 成功;IFC 导入失败 | 15.096 |
| FILE-05 | 通过 | 原生 STL 下载、文件回读、体积和包围盒误差比较 | 2.290 |
| ERR-01 | 通过 | 在原生导入阶段取消、事务回滚、原对象保护、后续导入恢复 | 17.517 |
| PERF-01 | 通过(本机样本范围) | 三组本地 STEP 样本、耗时、浏览器进程树 RSS、帧回调采样 | 17.700 |
| PERF-02 | 通过(本机范围) | 20 轮 STEP 导入、Box 修改、FCStd 保存、刷新重开、数据和内存趋势 | 94.688 |
实际修复
- 将原生返回的包围盒暴露到属性面板,没有在 Three.js 重算几何。
- 修复工作台深链接已显示命令面板却未绑定对应原生登记的问题。
- 主工作区复用 FreeCAD/OCCT 导入导出 STEP、IGES、BREP、STL。STL 读取使用 StlAPI_Reader,导出使用现有 TopoShape::exportStl。
- 导入采用显式事务提交/回滚。同步 OCCT 调用期间点击取消后显示取消中,待原生调用返回后回滚,不发布半成品,不销毁其他用户文档。
- 修复 Web 场景刷新时 TopoShape::getFaces 同步等待新 pthread 的死锁风险。仅 EMSCRIPTEN 分支在当前 Worker 网格化;桌面并行行为不变。
- 补齐 Std_SceneInspector 只读场景快照路径,避免链接完成后刷新失败。
- 打开的原生文档启用撤销模式,使结构和链接事务可撤销、重做。
- 复用已链接的 Mesh 原生模块登记 OBJ 导入;网格显示转换由现有 Part/OCCT 接口完成,不引入 JS 几何算法。
- 去除重复原生导入模块登记造成的同一处理器歧义。
测试基础设施还修复了文件选择器节点定位、重复下载覆盖检测、命令忙碌等待。真实浏览器鼠标点击和 CDP 文件选择器事件对应用户文件打开操作。复杂结构的核对使用项目公开的原生 Python 控制台,并保留请求与返回截图,没有绕过应用注入测试专用业务接口。
IFC 尚未解决
实际样本位于:
FreeCADBaseLib/sources/src/Qt-5.15.13/qt3d/src/3rdparty/assimp/src/test/models/IFC/AC14-FZK-Haus.ifc
FILE-02 报告中的 format-validation.json 记录该文件 SHA-256 及实际错误:
No native import handler is registered for .ifc
源码证据:freecad-source/src/WebAssembly/FreeCADCoreProbe/BimRuntimeProbe.cpp 中的现有 IfcOpenShell 替身带 _freecad_import_stub=True、_freecad_wasm_backend=False。其 open/write/api.run 主动抛出“requires the real IfcOpenShell binding”,并不是一个能解析真实 IFC 的内核。
已检查 freecad-source/build-web 和 FreeCADBaseLib 的相关文件名,没有找到真实 IfcOpenShell 源码包或 WASM 绑定。存在 IFC 示例、schema 和 FreeCAD IFC Python 业务脚本,不等于存在所需底层解析绑定。
已复核 docs/current/provided-source-index.md 的 IFC 续接记录:历史任务也检查了已索引的其它用户源树并记录同一缺口。本轮还检查了用户资料总索引中的 IFC/IfcOpenShell 引用,没有新增定位信息。这些是限定路径的检查,不宣称全机绝无该依赖;若真实包在其它位置,需要其准确路径。
也审阅了桌面 importIFClegacy.py:旧版内部解析路径只遍历特定产品类型,且已标注 deprecated。未把它当作现代 IFC 完整导入的静默替代,没有使用 Assimp/另一套 Web 几何内核规避 OCCT 唯一出口要求。
彻底关闭 FILE-02 需要补齐与本项目 Python 3.12、Emscripten 和现有 OCCT 兼容的真实 IfcOpenShell 绑定,然后连接已提供的 FreeCAD IFC 导入业务,使用该真实样本复测非空几何、层级、属性和持久化。仅登记命令或让缺依赖返回 success 都不能关闭此项。
性能范围
| 样本 | 字节数 | 加载测量秒 |
|---|---|---|
| Product1.stp | 10,552 | 2.612 |
| freecad-sample.step | 86,790 | 1.564 |
| Schenkel.stp | 590,055 | 8.937 |
small/medium/large 是现有样本的相对分级,不宣称 590,055 字节是生产大模型上限。测试为本机 Chrome headless 软件 WebGL;帧回调频率不是 CAD 绘制 FPS。浏览器进程树 RSS 会重复统计共享页,不等于精确物理内存或 WASM 单独占用。
20 轮循环剔除前 5 轮预热后,末五轮较初五轮平均 RSS 增长约 21.7 MB,无连续单调增长,低于预设 256 MiB 阈值。更大模型、不同显卡、长期运行和其他浏览器仍需另做容量评估。
构建和复测
正式构建检查 包含严格 TypeScript 和 Vite 构建,通过;后续新增的导入回滚/非法参数测试与已有窗口、显示协议测试共 7 个断言用例通过。
FREECAD_MANUAL_IDS=GEO-01,FILE-02,FILE-03,FILE-05,DOC-02,DOC-03,ERR-01,PERF-01,PERF-02 node tools/run_user_manual_tests.mjs
node tools/summarize_user_manual_tests.mjs
实现位于 tools/user-manual-remaining-cases.mjs,复用原调度、截图和检查点机制。新轮次创建独立目录;失败不会覆盖原始证据,也不会计作通过。
上线结论:IFC 项仍失败,九项未全部解决,不具备全范围上线放行依据。