让我们从坐标(IfcCartesianPointList3D)开始:每一个都是一个三元组,产生一个具有(x,y,z)坐标的点。
然后 IfcTriangulatedFaceSet 使用索引来构造三角形。它有 2 种索引模式:直接和间接通过 PnIndex。索引模式由是否存在 PnIndex 数组(属性编号 5)确定。请注意,我将这些变体称为直接和间接 - IFC 文档中没有这样提及它们。
直接索引
PnIndex 未设置。让我们看一个(简单且构造好的)示例:
#100=IFCCARTESIANPOINTLIST(((0,0,0),(1,0,0),(1,1,0),(0,1,0)));
#101=IFCTRIANGULATEDFACESET(
/*reference to the points*/ #100,
/*no normals*/ $,
/*no indication if closed or open*/ $,
/*coordinate indices*/ ((1,2,3),(1,3,4)),
/*no PnIndex*/ ());
这描述了一个位于 xy 平面上的正方形。属性 CoordIndex 中的每个条目都是一个三元组,它给出了 IfcCartesianPointList 中一个点的从 1 开始的索引。这意味着有两个三角形由以下点构成:
- (0,0,0) (1,0,0) (1,1,0)
- (0,0,0) (1,1,0) (0,1,0)
间接索引
让我们在前面的示例上进一步构建:
#100=IFCCARTESIANPOINTLIST(((0,0,0),(1,0,0),(1,1,0),(0,1,0)));
#101=IFCTRIANGULATEDFACESET(
/*reference to the points*/ #100,
/*no normals*/ $,
/*no indication if closed or open*/ $,
/*coordinate indices*/ ((1,2,3),(1,3,4)),
/*PnIndex*/ (2,3,4,1));
这次设置了 PnIndex。它增加了一个间接级别来访问这些点。从 CoordIndex 指向 PnIndex(基于 1)的三元组。然后使用在 PnIndex 中找到的值来访问 IfcCartesianPointList。
所以对于第一个三角形,我们有:CoordIndex 中的 (1,2,3)。这些指向 PnIndex 中的 2、3 和 4。这些导致点列表中的以下点: (1,0,0) (1,1,0) (0,1,0)
重复第二个三角形 (1,3,4) 的过程,我们从 PnIndex 和以下点获得值 2, 4, 1: (1,0,0) (0,1,0) (0,0,0)
它又是一个正方形,但这次使用了不同的三角剖分。
现在,如果您想知道您的壁厚,您需要根据生成的几何图形计算范围。如果你的墙与坐标系轴对齐,这很容易(得到最小和最大 X、Y 和 Z 之间的差异)。如果不是,您可能需要转换点或进一步研究 3D 范围计算(我的知识到此为止)。