【问题标题】:forge viewer - how to show object tree / components tree along with viewer?伪造查看器 - 如何与查看器一起显示对象树/组件树?
【发布时间】:2020-05-29 03:05:00
【问题描述】:

我们如何显示对象树/组件树以及查看器?这样用户可以点击树节点,然后他可以看到在查看器中选择的对象/dbid?

对此有什么想法吗?

【问题讨论】:

  • 内置模型树以层次结构显示对象,当单击节点时,相应的对象将突出显示。这符合您的要求吗?或者你能澄清“对象/组件”吗?快照或演示文件将有助于更好地理解需求。
  • 是的,它有效,如何通过点击对象和突出显示功能显示内置模型树?
  • 我的意思是你可以直接使用内置功能。它们是 Forge Viewer 中的菜单。单击节点突出显示对象也是现有功能。您只需单击树中的对象节点即可。这是向他们展示的快照。 paste.pics/8995d8fdb5bcf3002bec67742b6d7bbc 或者如果我误解了您的问题,请详细说明更多描述和快照。谢谢。
  • 抱歉,现在只是查看您的回复,所以没有看到上面的快照...您可以再粘贴一次吗...或任何仅显示如何使用这些内置功能的示例...谢谢
  • 快照还在。也许您的互联网对访问某些资源有限制。我将快照放在我们的 OneDrive 上,并制作了一个简短的网址。 shorturl.at/luGTY 。如果仍然无法正常工作,并且快照不符合您的要求,请发送电子邮件至 forge.help@autodesk.com 向我们发送有关要求的更多说明。

标签: autodesk-forge autodesk-viewer autodesk-model-derivative autodesk-data-management


【解决方案1】:

因此,您想通过 Forge Viewer 构建一个类似的模型树。您分享的演示是使用JStree library 列出BIM 360 中的文件。相信您对JsTree 很熟悉。

为了转储 Forge Viewer 的模型树节点,下面的代码可以作为参考。它枚举层次结构并一一获取节点名称和dbId。

function getAllLeafComponents(viewer, callback) {
    var cbCount = 0;  
    var tree;  
    var jsData = []

function getLeafComponentsRec(current,parent) {
    cbCount++;
    if (tree.getChildCount(current) != 0) {
        tree.enumNodeChildren(current, function (children) {
            getLeafComponentsRec(children,current);
        }, false);
    } 
    var nodeName = viewer.model.getInstanceTree().getNodeName(current)
    jsData.push({id:current,parent:parent,text:nodeName})  

    if (--cbCount == 0) callback(jsData);
}
viewer.getObjectTree(function (objectTree) {
    tree = objectTree;
    var rootId = tree.getRootId()
    var nodeName = viewer.model.getInstanceTree().getNodeName(rootId)
    jsData.push({id:rootId,parent:'#',text:nodeName}) 
    var allLeafComponents = getLeafComponentsRec(rootId,'#');

 });
}

要使用该功能,

getAllLeafComponents(viewer, function (jsonData) {
   console.log(jsonData);

})

它转储了可以与 JSTree 一起使用的树。由于数据告诉了DbId,所以当点击JStree节点时,取出dbId,调用

viewer.fitToView([dbId])

它将缩放到对象。

【讨论】:

  • 谢谢这对我有用。这里还有一个问题,如果我们在树的左侧有像上面这样的对象,是否可以在单击时只显示关联的标记显示和其他隐藏的标记?所以这将很容易让用户查看和关联。
  • 从上面,我的意思是只显示墙壁对象上的标记,而我点击墙壁对象?当我们从存储在数据库中的 svg 数据中恢复标记时,这可能吗?
  • 是的,将标记 svg 数据保存到数据库并再次加载是可行的。但是,如果您的用户同时为多个墙壁进行标记,您可能需要计算特定墙壁区域周围的标记元素,并在选择特定墙壁时隐藏 svg 数据的其他元素。由于这是一个新问题,我建议您发布一个新主题以便更好地讨论
  • 关于这个线程中的原始问题:对象树。在您播放我的代码并且它可以工作后,如果您能接受它作为答案,我将不胜感激。将来会帮助其他客户。
猜你喜欢
  • 2021-05-07
  • 2023-03-18
  • 2021-05-02
  • 2018-06-28
  • 2018-10-22
  • 2019-05-15
  • 1970-01-01
  • 2021-05-01
  • 2020-03-01
相关资源
最近更新 更多