forge viewer - как показать дерево объектов / дерево компонентов вместе со средством просмотра? - PullRequest
0 голосов
/ 13 февраля 2020

Как мы можем показать дерево объектов / дерево компонентов вместе со средством просмотра? Чтобы пользователь мог щелкнуть по узлу дерева и затем увидеть объект / базу данных, выбранный в программе просмотра?

Есть ли какие-нибудь мысли по этому поводу?

1 Ответ

0 голосов
/ 20 февраля 2020

Итак, вы хотели построить аналогичное дерево моделей в стороне от Forge Viewer. Демонстрация, которой вы поделились, использует библиотеку JStree для вывода списка файлов в 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])

. Это приведет к масштабированию объекта.

enter image description here

...