该技能用于在 ThatOpen 查看器中加载 IFC 文件、配置 IFC 加载器,以及在 IfcLoader 与 IfcImporter 两种方案间做选择。IFC 加载会把 IFC 转换为内部 Fragments 二进制格式,以支持高性能 3D 渲染;耗时部分是 IFC 到 Fragments 的转换,而非片段加载本身,因此建议转换一次并存储 Fragments 二进制以便快速重载。
主要方式:IfcLoader(高层,@thatopen/components)是标准组件,封装 web-ifc,处理 WASM 设置、片段转换与场景集成;IfcImporter(低层,@thatopen/fragments)直接做片段转换,不依赖组件框架,适合服务端处理、Web Worker 或自定义管线。
关键规则:load() 前必须先调用 setup(),否则会出现 WASM 初始化失败;WASM 路径版本必须与安装的 web-ifc 版本匹配,否则会静默解析失败或崩溃;不要在未检查 package.json 的情况下在 WASM 路径硬编码 web-ifc 版本;加载 IFC 前先初始化 FragmentsManager,调用 fragmentsManager.init(workerURL);IFC 数据必须以 Uint8Array 传入,load() 不接受 ArrayBuffer、字符串或 File;销毁时必须调用 components.dispose(),因为 IfcLoader 持有会分配 WASM 堆内存的 IfcAPI 实例。
用法上,setup() 默认 autoSetWasm 为 true,可自动解析 WASM 路径,也可手动指定 CDN 或本地路径;使用本地路径时目录必须包含 web-ifc.wasm(多线程模式还需 web-ifc-mt.wasm)。加载时先 fetch 文件得到 ArrayBuffer 再转为 Uint8Array,调用 load(data, coordinate, name) 并把 model.object 加入场景;加载多个需空间对齐的模型时 coordinate 设为 true。可通过 settings.webIfc 调整 COORDINATE_TO_ORIGIN、USE_FAST_BOOLS 等 web-ifc 设置;onIfcImporterInitialized 事件可增删要导入的 IFC 实体类型,默认不导入 IFCSPACE、IFCOPENINGELEMENT 等类别。
限制与注意:版本不匹配、缺少 setup 或未初始化 FragmentsManager 均会导致失败;原始 web-ifc 查询后必须调用 cleanUp()。文档还列出 IfcLoader、IfcImporter 的属性和方法细节以及参考文件,具体 API 签名与示例以官方文档为准。