节点和碎片数据结构

时间:2017-03-21 10:58:53

标签: autodesk autodesk-forge autodesk-viewer

查看器的nodesfragids是否代表有向图数据结构?

如果是这样,边缘是如何表现的?

两个节点之间的边缘代表什么?

它是否总是代表一棵树,或者可能有多个连接的组件?

整数数组与它代表的图形之间是否存在可视化示例映射?

2 个答案:

答案 0 :(得分:1)

节点表示一个对象,该对象位于表示原始设计模型中的数据结构的树层次结构中。例如,如果将Inventor文件发送到Model Derivative,则每个节点将表示装配,子装配或零件。树实例将节点链接在一起以反映该结构。 fragmentIds表示网格。特定对象可能是片段的集合。例如,对象具有id(唯一id,其映射到原始设计模型唯一ID或GUID),每个对象可能具有作为片段集合的几何。 在Forge模型和Forge viewerAPI中,几何体表示为带三角形的网格。因此,与Brep表示不同,没有表面边缘,只有三角形边缘。剪影显示在屏幕上,因为WEBGL渲染器在画布中渲染网格,但它不是Brep定义的边缘。如果你在谈论定义网格的三角形边,那么它就是另一个故事。 但是,Forge Model Derivative API可以将您的模型导出为STEP,IGES,STL格式,您最终将获得Brep表示。 要查看节点,请从Viewer中显示对象树(或json响应中的元数据),并查看网格(fragmentIds的集合),隔离节点。

答案 1 :(得分:1)

你问题的本质是什么?你想要实现什么目标?当处理具有大量组件的大型模型时,节点和片段在阵列中被压缩以节省存储器。查看器API公开了一些方法,允许您在给定nodeId或其片段的情况下迭代节点的子节点:

-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我写的可能会有所帮助。