Autodesk forge forge viewer-如何与查看器一起显示对象树/组件树?

Autodesk forge forge viewer-如何与查看器一起显示对象树/组件树?,autodesk-forge,autodesk-viewer,autodesk-model-derivative,autodesk-data-management,Autodesk Forge,Autodesk Viewer,Autodesk Model Derivative,Autodesk Data Management,如何在查看器中显示对象树/组件树?这样用户就可以单击树节点,然后可以看到在查看器中选择的对象/dbid 您对此有何想法?因此,您希望通过Forge Viewer构建一个类似的模型树。您共享的演示用于列出BIM 360中的文件。我相信你对JsTree很熟悉 要转储Forge Viewer的模型树节点,下面的代码可以作为参考。它枚举层次结构并逐个获取节点名和dbId function getAllLeafComponents(viewer, callback) { var cbCount =

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


您对此有何想法?

因此,您希望通过Forge Viewer构建一个类似的模型树。您共享的演示用于列出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])
它将缩放到对象


内置模型树显示层次结构中的对象,单击节点时,相应的对象将高亮显示。这符合你的要求吗?或者你能澄清“对象/组件”吗?快照或演示文件将有助于更好地理解需求。是的,它是有效的,我如何通过单击对象并突出显示功能来显示内置模型树?我的意思是您可以直接使用内置功能。它们是Forge Viewer中的菜单。单击节点以高亮显示对象也是一个现有功能。只需单击树中的对象节点即可。这是显示它们的快照。或者如果我误解了你的问题,请用更多的描述和快照来详细说明。谢谢。很抱歉现在只是查看您的回复,所以没有看到上面的快照…您可以再次粘贴它吗…或者任何演示如何使用这些内置功能的示例…谢谢快照仍然存在。。可能您的internet对访问某些资源有限制。我将快照放在OneDrive上,并创建了一个简短的url。如果它仍然无法工作,并且快照不符合您想要实现的目标,请在forge向我们发送电子邮件。help@autodesk.com与更多的需求描述。谢谢这将为我工作。这里还有一个问题,如果我们在树的左侧有如上所述的对象,那么在单击它时是否可以只显示关联的标记show和其他hidden?因此,这将便于用户查看和关联。从上面看,我的意思是只显示walls对象上的标记,而我单击walls对象?当我们从存储在数据库中的svg数据恢复标记时,这可能吗?是的,将标记svg数据保存到数据库并再次加载是可行的。但是,如果用户同时对多个墙进行标记,则可能需要计算特定墙区域周围的标记元素,并在选择特定墙时隐藏svg数据的其他元素。由于这是一个新问题,我建议您发布一个新的线程,以便更好地讨论这个线程中的原始问题:对象树。在您播放我的代码并运行后,如果您能接受它作为答案,我将不胜感激。它将在未来帮助其他客户。