You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Autodesk Forge Viewer提取IFCCLASSIFICATION并分组元素求助

处理Autodesk Forge Viewer中IFCCLASSIFICATION提取与元素分组需求

1. 提取IFCCLASSIFICATION属性

IFC模型中的IFCCLASSIFICATION信息在Forge Viewer中会被解析为元素的自定义属性,可通过以下方式获取:

  • 调用Viewer的viewer.model.getPropertyDb()方法获取属性数据库实例
  • 针对单个元素,使用getProperties(dbId, callback)查询所有属性,在回调结果中查找与IFCCLASSIFICATION相关的字段(字段名通常为IfcClassification或对应分类体系名称,需根据实际转换结果确认)
  • 批量处理元素时,可通过search()方法或遍历所有可见元素ID来批量获取属性

代码示例:

// 获取属性数据库
const propDb = viewer.model.getPropertyDb();

// 查询单个元素的分类属性
viewer.model.getProperties(dbId, (props) => {
  const classificationProp = props.properties.find(p => p.displayName === 'IfcClassification');
  if (classificationProp) {
    console.log('元素分类:', classificationProp.displayValue);
  }
});

注意:使用Model Derivative转换IFC文件时,需确保开启完整属性提取,可在转换请求的advanced选项中配置:

{
  "advanced": {
    "extractAllAttributes": true
  }
}

2. 按IFCCLASSIFICATION分组元素

获取元素分类属性后,可按分类值对元素进行分组:

  • 初始化Map对象(或普通JS对象)存储分组,键为分类值,值为对应元素ID数组
  • 遍历所有可见元素ID,逐个获取分类属性并更新分组结构

代码示例:

const classificationGroups = new Map();

// 获取所有可见元素ID
const visibleDbIds = viewer.model.getVisibleDbIds();

// 批量处理元素分组
visibleDbIds.forEach(dbId => {
  viewer.model.getProperties(dbId, (props) => {
    const classificationProp = props.properties.find(p => p.displayName === 'IfcClassification');
    if (classificationProp) {
      const className = classificationProp.displayValue;
      if (!classificationGroups.has(className)) {
        classificationGroups.set(className, []);
      }
      classificationGroups.get(className).push(dbId);
    }
  });
});

// 输出分组结果
console.log('按分类分组:', classificationGroups);

3. 分组展示与交互(可选)

若要实现类似示例的分组展示效果:

  • 自定义UI组件(如侧边栏列表)展示所有分类分组
  • 绑定点击事件,点击分组时调用viewer.isolate(groupDbIds)或viewer.select(groupDbIds)高亮/隔离对应元素

内容的提问来源于stack exchange,提问作者Jakub Petráň

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 21:32:41