2017-03-17 43 views
0

我有一個要求遍歷模型樹,並在每個節點執行一些業務邏輯,我想知道是否有任何幫助方法,我可以使用,這將有助於通過節點移動。比如廣度優先搜索或深度優先搜索甚至簡單的獲取節點的孩子和父母的方法?在模型樹中漫步的任何輔助方法?

另外尋找葉節點的方法將會非常有用。 (如果可能,這將是很好的,如果這些提供的JavaScript而不是ES6,我知道Phillipe Leefsma有一篇博客文章,有一段代碼查找葉節點,但它是在ES6中,我不能似乎得到它轉換回Javascript)

任何幫助,非常感謝。

回答

1

讓所有的孩子得到實例樹和節點的方法是 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