2017-03-21 150 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