2017-03-17 6 views
0

私はモデルツリーを横断する必要があり、各ノードでいくつかのビジネスロジックを実行するので、ノードを移動するのに役立つヘルパーメソッドがあるかどうか疑問に思っていました。幅広い最初の検索や深さの最初の検索やノードや子供や親を取得するための簡単な方法など、モデルツリーを歩くヘルパーメソッドはありますか?

リーフノードを見つける方法も非常に役立ちます。

(可能であれば、ES6ではなくjavascriptで提供されていれば可能ですが、Phillipe Leefsmaには葉ノードを見つけるためのコードが含まれていますが、ES6に入っているブログ記事がありますJavascriptに変換されているようです)

何か助けていただければ幸いです。

答えて

1

インスタンスツリーとノードを与えられたすべての子を取得する方法は、すべての子dbidsがコールバックにある instanceTree.enumNodeChildren(node, callback)です。あなたはあなたの方法を変更することができ

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; 
} 

:その後、最良の方法は、幅優先探索を使用している

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

は最初instanceeツリーとルートIDを取得し、ツリーをトラバースするにはパフォーマンスを最適化する

詳細はこちらhttps://forge.autodesk.com/cloud_and_mobile/2015/12/select-all-elements-in-the-viewer-with-view-and-data-api-with-javascript.html

関連する問題