如何检索 Forge Viewer objectTree?

Posted

技术标签:

【中文标题】如何检索 Forge Viewer objectTree?【英文标题】:How to Retrieve Forge Viewer objectTree? 【发布时间】:2016-12-18 16:51:12 【问题描述】:

我的目标是通过根据我在 revit 中创建的线条向查看器添加新几何图形来突出显示房间,就像他们在此处所做的那样 Link

但我不知道如何访问这些行 ID。 我知道它们在 revit (element_id) 中是什么,但不知道它们如何映射为 dbid。

关注这个Blog Post

我想访问我的扩展中的 objectTree 以找出答案,但它总是以未定义的形式返回。

var tree;
//old way - viewer is your viewer object - undefined
viewer.getObjectTree(function (objTree) 
 tree = objTree;
);

//2.5 - 未定义

  var instanceTree = viewer.model.getData().instanceTree;
  var rootId = this.rootId = instanceTree.getRootId();

//- 未定义

  var objectTree = viewer.getObjectTree();

谁能告诉我它是否仍然适用于他们我正在使用 API 的 v2 将 rvt 转换为 svf 和 viewer3D.js 的 2.9

注意,如果我调用它,我可以看到一个 dbid 列表

var model = viewer.impl.model;
var data = model.getData();
var fragId2dbIdArray = data.fragments.fragId2dbId ;

但无法映射回 Revit element_id

【问题讨论】:

【参考方案1】:

从 2.9 版开始,这仍然有效。这是我的控制台:

您可以尝试以下几件事:

    viewer 是否未定义?获取viewer 时是否在正确的范围内? 必须先加载文档,然后才能获取实例树。加载文档后,将触发一个名为 Autodesk.Viewing.GEOMETRY_LOADED_EVENT 的事件,然后您就可以开始操作实例树了。

只需这样做:

viewer.addEventListener(Autodesk.Viewing.GEOMETRY_LOADED_EVENT, function () 
var instanceTree = viewer.model.getData().instanceTree;
);

更多结构化代码,请关注this guide添加扩展。

有一个more detailed blog post 用于监听哪个事件。不过,它仍然使用旧的方式来获取实例树。

【讨论】:

【参考方案2】:

Shiya Luo 是正确的,查看器尚未完成几何加载

在我的扩展加载函数中,我添加了两个事件侦听器,并确保它们在尝试访问 instanceTree 之前都被触发

 viewer.addEventListener(Autodesk.Viewing.GEOMETRY_LOADED_EVENT, function () 
    finishedGEOMETRY_LOADED_EVENT = true;
    if(finishedGEOMETRY_LOADED_EVENT && finishedOBJECT_TREE_CREATED_EVENT )
        afterModelLoadEvents(viewer);
    
 );
viewer.addEventListener(Autodesk.Viewing.OBJECT_TREE_CREATED_EVENT, function () 
    finishedOBJECT_TREE_CREATED_EVENT = true;
    if(finishedGEOMETRY_LOADED_EVENT && finishedOBJECT_TREE_CREATED_EVENT )
        afterModelLoadEvents(viewer);           
    
 );

【讨论】:

以上是关于如何检索 Forge Viewer objectTree?的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Forge Viewer 中检索二维 DWG 文件的地理参考或坐标

Forge Viewer:如何将任意客户点转换为世界点

forge Viewer - 如何以编程方式选择 dbId,因为它会自动取消选择其他选择

如何在 forge-viewer 中从最新版本的 three.js 添加几何图形?

如何克服 Autodesk Forge Viewer 中的窗口选择限制?

如何获取 forge-viewer onClick 事件的 xyz 坐标?