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

如何在Forge Viewer中实现Revit Room元素的可点击交互?

Forge Viewer 实现2D图纸中Room/Spaces可点击操作教程

1 调整模型加载配置,强制加载Room/Space数据

Revit导出的Forge模型默认不会在2D视图中加载房间、空间这类非构件类AEC数据,需要在加载模型时主动开启配置:

  • 调用loadDocumentNode接口时传入loadAllAECData: true参数,示例代码如下:
// 初始化Viewer实例
const viewer = new Autodesk.Viewing.GuiViewer3D(document.getElementById('forgeViewer'));
viewer.start();

// 加载模型
Autodesk.Viewing.Document.load('你的模型URN', (doc) => {
  const defaultView = doc.getRoot().getDefaultGeometry();
  viewer.loadDocumentNode(doc, defaultView, {
    *关键参数:开启全量AEC数据加载,包含Room、Space、区域等语义对象*
    loadAllAECData: true
  }).then(() => {
    console.log('模型加载完成,Room数据已导入Viewer');
  });
}, (loadErr) => console.error('模型加载失败:', loadErr));

2 绑定点击拾取事件,获取选中的Room数据

模型加载完成后,绑定Viewer的选中事件即可监听到用户点击的Room对象:

  • 监听SELECTION_CHANGED_EVENT事件,过滤提取Room/Spaces类型构件的属性,示例代码如下:
viewer.addEventListener(Autodesk.Viewing.SELECTION_CHANGED_EVENT, (selectEvent) => {
  const selectedIds = selectEvent.dbIdArray;
  if (selectedIds.length === 0) return;

  // 获取选中构件的属性,过滤出Room/Spaces类型
  viewer.getProperties(selectedIds[0], (propRes) => {
    const categoryVal = propRes.properties?.find(item => item.displayName === 'Category')?.displayValue;
    if (categoryVal === 'Rooms' || categoryVal === 'Spaces') {
      console.log('点击获取到的Room数据:', propRes);
      // 此处可执行后续的属性提取、数据导出、弹窗展示等自定义逻辑
    }
  });
});

3 可选:优化拾取交互反馈

如果默认选中高亮效果不明显,可自定义Room选中后的视觉样式:

  • 自定义选中高亮颜色示例:
// 设置选中高亮为半透明蓝色,透明度0.6
viewer.setSelectionColor(new THREE.Color(0, 0.5, 1), 0.6);

验证方法:若点击后无法获取Room数据,可执行代码viewer.search('Rooms', (dbIds) => console.log('当前视图中所有Room的ID:', dbIds), null, 'Category'),确认Room数据是否已正常加载到当前视图中。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 08:36:00