Files
FreeCADWasmDev/docs/current/user-tests-20260915/REMAINING-NINE-REPORT.md
wangdequan 72152ef356 Save verified native IFC import and user validation evidence
Real IFC2X3/IFC4 import tested. Full BIM authoring/export remains out of scope; 349-second building import performance remains to optimize.
2026-09-16 04:27:37 +08:00

6.8 KiB
Raw Blame History

原剩余九项:修复、执行结果与未解决依赖

历史报告。2026-09-16 后续已接入真实 IFC 原生导入绑定并完成复测,详见 IFC 修复记录。以下保留当时的失败依据,不代表最新状态。

日期:2026-09-15。

结果

原九项均已编写真实浏览器测试并执行,8 项通过、1 项失败。这里的“已执行”不等于“全部通过”:FILE-02 的 IFC 原生导入仍失败,不能将其从验收范围删除。

最终逐步骤报告 / JSON 结果

  • 最终轮: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

实际修复

  1. 将原生返回的包围盒暴露到属性面板,没有在 Three.js 重算几何。
  2. 修复工作台深链接已显示命令面板却未绑定对应原生登记的问题。
  3. 主工作区复用 FreeCAD/OCCT 导入导出 STEP、IGES、BREP、STL。STL 读取使用 StlAPI_Reader,导出使用现有 TopoShape::exportStl。
  4. 导入采用显式事务提交/回滚。同步 OCCT 调用期间点击取消后显示取消中,待原生调用返回后回滚,不发布半成品,不销毁其他用户文档。
  5. 修复 Web 场景刷新时 TopoShape::getFaces 同步等待新 pthread 的死锁风险。仅 EMSCRIPTEN 分支在当前 Worker 网格化;桌面并行行为不变。
  6. 补齐 Std_SceneInspector 只读场景快照路径,避免链接完成后刷新失败。
  7. 打开的原生文档启用撤销模式,使结构和链接事务可撤销、重做。
  8. 复用已链接的 Mesh 原生模块登记 OBJ 导入;网格显示转换由现有 Part/OCCT 接口完成,不引入 JS 几何算法。
  9. 去除重复原生导入模块登记造成的同一处理器歧义。

测试基础设施还修复了文件选择器节点定位、重复下载覆盖检测、命令忙碌等待。真实浏览器鼠标点击和 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 项仍失败,九项未全部解决,不具备全范围上线放行依据。