2017-03-21 114 views
0

查看器的nodesfragids是否代表有向圖數據結構?節點和碎片數據結構

如果是這樣,邊緣如何表示?

兩個節點之間的邊界代表什麼?

它總是代表一棵樹還是可能有多個連接組件?

是否存在整數數組與它所表示的圖形之間的視覺示例映射?

回答

1

你的問題的本質是什麼?你想達到什麼目的?在處理具有大量組件的大型模型時,節點和片段正在數組中進行計算以節省內存。觀衆API公開的方法,可以讓你通過給定一個節點ID節點的孩子或其片段重複:

-instanceTree.enumNodeChildren

-instanceTree.enumNodeFragments

var instanceTree = viewer.model.getData().instanceTree; 

var rootId = this.rootId = instanceTree.getRootId(); 
var rootName = instanceTree.getNodeName(rootId); 
var childCount = 0; 

instanceTree.enumNodeChildren(rootId, function(childId) { 

    var childName = instanceTree.getNodeName(childId); 

    console.log(childName); 

    childCount++; 
}); 

從根節點開始,你可以構建你想要的數據結構。我寫的This article可能會有所幫助。

+0

我試圖找到更快的搜索方式,例如,通過到某個節點或某個位置的距離來找到最近的節點,我需要一個BFS的。 – shinzou

1

節點代表一個對象,它坐落在代表原始設計模型中數據結構的樹層次結構中。例如,如果您將Inventor文件發送到模型衍生物,則每個節點將代表一個裝配體,一個子裝配體或一個零件。樹實例會將節點鏈接在一起以反映該結構。 fragmentIds表示網格。一個特定的對象可能是一個片段集合。例如,一個對象具有一個id(映射到原始設計模型唯一ID或GUID的唯一id),每個對象可能具有幾何形狀,這是一個片段集合。 在Forge模型和Forge查看器API中,幾何體用三角形表示爲網格。因此,與Brep表示不同,沒有表面邊緣,但只有三角形邊緣。該輪廓顯示在屏幕上,因爲WEBGL渲染器在畫布中呈現網格,但它不是每個Brep定義的邊緣。如果你正在談論有三角形邊緣來定義網格,那麼這是另一回事。 但是,Forge模型衍生API可以將您的模型導出爲STEP,IGES,STL格式,您最終將獲得Brep表示。 要查看節點,請從查看器顯示對象樹(或來自json響應的元數據),並查看網格(fragmentIds的集合),隔離節點。

+0

那麼節點的數據結構是什麼?它是一個數組,但它是否具有像堆或二叉樹這樣的基礎結構? https://en.wikipedia.org/wiki/Binary_tree#Arrays – shinzou