节点和碎片数据结构

Nodes and fragids data structre

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

如果是,边是如何表示的?

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

它总是代表一棵树还是可能有多个连接的组件?

是否有整数数组与其表示的图形之间的可视化示例映射?

节点代表一个对象,它位于代表原始设计模型中的数据结构的树层次结构中。例如,如果您将 Inventor 文件发送到 Model Derivative,每个节点将代表一个组件、一个子组件或一个零件。树实例将 link 节点组合在一起以反映该结构。 fragmentIds 代表网格。特定对象可能是片段的集合。例如,一个对象有一个 id(映射到原始设计模型的唯一 ID 或 GUID 的唯一 id),每个对象可能有一个几何体,它是一个片段的集合。 在 Forge 模型和 Forge 查看器API 中,几何图形表示为带有三角形的网格。因此与 Brep 表示不同,没有曲面边,只有三角形边。轮廓显示在屏幕上是因为 WEBGL 渲染器渲染 canvas 中的网格,但根据 Brep 定义它不是边。如果您谈论的是用于定义网格的三角形边,那就是另一回事了。 但是,Forge Model Derivative API 可以将您的模型导出为 STEP、IGES、STL 格式,您最终将在其中获得 Brep 表示。 要查看节点,请显示来自查看器的对象树(或来自 json 响应的元数据),并查看网格(fragmentId 的集合),请隔离一个节点。

你的问题的本质是什么?你想达到什么目的?在处理具有大量组件的大型模型时,节点和片段在数组中被压缩以节省内存。查看器 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我写的可能会有帮助。