遍历模型树的任何辅助方法?

Any helper methods for walking through the model tree?

我需要遍历模型树并在每个节点执行一些业务逻辑,我想知道是否有任何辅助方法可以帮助我在节点中移动。例如广度优先搜索或深度优先搜索,甚至是获取节点子节点和父节点的简单方法?

查找叶节点的方法也会很有帮助。

(如果可能的话,如果这些在 javascript 而不是 ES6 中提供,我知道 Phillipe Leefsma 有一篇博客文章,其中有一段用于查找叶节点的代码,但它在 ES6 中而且我似乎无法将其转换回 Javascript)

非常感谢任何帮助。

给定实例树和节点获取所有子节点的方法是 instanceTree.enumNodeChildren(node, callback) 其中所有子 dbids 都在回调中。

要遍历树,首先获取instancee树和根id:

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

那么最好的方法就是使用广度优先搜索:

function getAlldbIds (rootId) {
    var alldbId = [];
    if (!rootId) {
        return alldbId;
    }
    var queue = [];
    queue.push(rootId);
    while (queue.length > 0) {
        var node = queue.shift();
        alldbId.push(node);
        instanceTree.enumNodeChildren(node, function(childrenIds) {
            queue.push(childrenIds);
        });
    }
    return alldbId;
}

您可以修改您的方法以优化性能。

在此处阅读更多相关信息:https://forge.autodesk.com/cloud_and_mobile/2015/12/select-all-elements-in-the-viewer-with-view-and-data-api-with-javascript.html