ModelStructureInfo返回rooms为null致Forge热力图功能异常求助
可能原因及对应解决方案
检查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

