Итак, вы хотели построить аналогичное дерево моделей в стороне от 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])
. Это приведет к масштабированию объекта.