用途:在 ThatOpen 已加载的 BIM 片段(fragment)上按 IFC 类别、楼层、模型或自定义条件组织元素,并提取属性集、数量集、类型与关系数据。
主要能力:Classifier 提供 byCategory()、byIfcBuildingStorey()、byModel() 三种内置分类,find() 支持跨分类交集查询并返回 ModelIdMap;getGroupData/addGroupItems/removeItems/setGroupQuery 可构建自定义分组与动态查询;aggregateItems 与 aggregateItemRelations 支持按查询或 IFC 关系聚合。FragmentsManager.getData(items, config) 在 web worker 中提取指定元素的 IFC 属性数据,返回按模型 UUID 分组的 ItemData 数组。ItemsFinder 通过 categories、relation、attributes 结构化参数搜索元素,支持 create() 命名查询、getItems() 执行、addFromCategories() 自动生成类别查询,以及 export/import 序列化。
使用方式:先加载模型生成 FragmentsModel,再调用分类方法,然后通过 find() 或 getItems() 得到目标 ModelIdMap,最后传给 getData() 提取属性。示例:await classifier.byCategory(); await classifier.byIfcBuildingStorey(); const wallItems = await classifier.find({Categories:["IFCWALL"], Storeys:["Ground Floor"]}); const wallData = await fragments.getData(wallItems); 调用 getData() 前需执行 FragmentsManager.init(workerURL)。
适用场景:BIM 查看器中的属性面板、按楼层或类别筛选、跨模型查询、自定义分类(如防火等级)、数据导出与校验。
限制:分类必须在模型加载后执行,否则分组为空;模型卸载重载后需重新分类;不要手动遍历 classifier.list 构建映射,应使用 find();避免一次性查询数千元素而不分页,否则结果序列化回主线程会造成卡顿;分类查询基于片段层而非原始 web-ifc,直接访问 IFC 属性需使用 thatopen-core-web-ifc。