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

관련 문제