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

ModelStructureInfo返回rooms为null致Forge热力图功能异常求助

解决ModelStructureInfo返回rooms为null的问题

可能原因及对应解决方案

  • 检查Revit模型中房间的有效性
    确保模型内的房间是已放置并完成边界计算的Revit房间对象,而非仅绘制的房间边界。未完成边界计算的房间在导出时不会被纳入模型数据,导致DataViz无法识别。在Revit中选中房间,确认属性面板里的“面积”“周长”等参数已正常生成;若未计算,点击“房间和面积”选项卡中的“计算房间”按钮重新生成。

  • 确认模型导出时的设置
    导出Revit模型为NWD或SVF格式时,需确保房间数据被包含。用Revit导出NWD时,在导出设置中勾选“房间”选项;通过Forge Design Automation转换模型时,需在转换参数中明确包含房间类别(如SVF2转换时,设置hiddenObjects参数不隐藏房间,或指定包含Rooms类别)。

  • 验证DataViz API的调用时机
    必须等模型完全加载完成后再调用ModelStructureInfo。若在模型加载过程中过早调用,房间数据尚未被解析,会返回null。正确做法是监听Viewer的GEOMETRY_LOADED_EVENT或MODEL_LOADED_EVENT,在事件回调中执行初始化和获取房间操作。示例代码:

    viewer.addEventListener(Autodesk.Viewing.GEOMETRY_LOADED_EVENT, () => {
      const modelStructInfo = new Autodesk.DataVisualization.Core.ModelStructureInfo(viewer.model);
      modelStructInfo.init().then(() => {
        const rooms = modelStructInfo.rooms;
        if (rooms) {
          // 后续热力图逻辑
        }
      });
    });
    
  • 适配非英文模型的类别名称
    非英文版本Revit中,房间的类别名称可能不是英文“Rooms”,导致DataViz API无法识别。可手动指定类别名称查询,示例代码:

    const modelStructInfo = new Autodesk.DataVisualization.Core.ModelStructureInfo(viewer.model);
    // 以意大利语房间类别名"Stanze"为例
    modelStructInfo.init({ roomCategoryNames: ["Stanze"] }).then(() => {
      const rooms = modelStructInfo.rooms;
      // 处理房间数据
    });
    

    若不确定模型中房间的类别名称,可通过Viewer的search方法查询所有类别:

    viewer.search('', (results) => {
      const categories = new Set(results.map(item => item.category));
      console.log('模型中的所有类别:', categories);
    }, null, ['Category']);
    
  • 更新DataViz库版本
    旧版本DataViz API可能存在房间识别bug,尝试升级到最新版本的@aps_sdk/dataviz包(或对应CDN链接),确保API逻辑已修复相关问题。

内容的提问来源于stack exchange,提问作者kotarotanaka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 01:41:03