8.8.3.47 IfcTriangulatedFaceSet(三角化面集)
8.8.3.47.1 语义定义(Semantic definition)
IfcTriangulatedFaceSet 是一种三角化面集,其中所有面均由三角形边界构成。这些面通过由三个笛卡尔点定义的隐式折线构建。根据继承属性 Closed 的值,IfcTriangulatedFaceSet 实例表示:
- 如果为 TRUE,表示边界表示(或 B-rep);
- 如果为 FALSE,表示基于面的表面表示。
每个点的坐标通过二维列表 CoordIndex 提供的有序笛卡尔点列表的基于1的索引来提供,其中:
- 二维列表的第一个维度对应三角形面的列表;
- 二维列表的第二个维度恰好提供三个索引。每个索引指向作为三角形顶点的笛卡尔点。
根据 PnIndex 的提供情况,索引要么直接指向在超类型 IfcTessellatedFaceSet 中定义的 Coordinates 所引用的 IfcCartesianPointList3D,要么指向 PnIndex,其中该位置的整数值提供 IfcCartesianPointList3D 内坐标值的位置。有关点索引的处理,请参见图1。

有关不使用(默认)和使用 PnIndex 的 IfcTriangulatedFaceSet 的使用,请参见图2。

可选地,可以提供法线。仅支持每个向量的法线,当三角形对应三个顶点的三个法线不共线于三角形面的法线时,允许视觉上弯曲的三角形。如果它们相同,则应省略法线。
注意 在具有弯曲三角形面的体表示情况下,导出此三角形上下文中所有三个顶点的不同法线,以描述平滑可视化的曲率。在没有曲率的三角形面情况下,三个基于顶点的法线是相同的,并且总是可以从面计算得出。因此,仅应在支持通过三角形曲率进行平滑可视化时导出顶点。在刻面表示情况下,不应导出顶点。
法线由二维列表 Normals 提供,其中:
- 二维列表的第一个维度对应三角形面的顶点索引列表;
- 二维列表的第二个维度恰好提供三个实数值,以确定此三角形顶点处法线的方向。
CoordIndex 中的索引指向 Normals 列表。CoordIndex 的索引同时应用于点和法线,要么直接应用,要么通过 PnIndex 应用。有关法线的处理,请参见图3。

注意 使用对应的点和法线列表允许仅使用单个索引列表指向两者,但代价是顶点集合不唯一。
图4显示了未带注释的 IfcTriangulatedFaceSet 的使用。IfcTriangulatedFaceSet 的图表表示索引和索引指向的有序列表。索引从1开始(索引为1到N),如果 CoordIndex 中的最大索引为N,则 IfcCartesianPointList 应有N个3:3坐标的列表。

图4显示了一个由以下表示的 IfcTriangulatedFaceSet:
CoordIndex:
((1,6,5), (1,2,6), (6,2,7), (7,2,3), (7,8,6), (6,8,5), (5,8,1), (1,8,4), (4,2,1), (2,4,3), (4,8,7), (7,3,4))
IfcCartesianPointList3D:
((0.,0.,0.), (1.,0.,0.), (1.,1.,0.), (0.,1.,0.), (0.,0.,2.), (1.,0.,2.), (1.,1.,2.), (0.,1.,2.))
注意 IfcTriangulatedFaceSet 的定义基于 ISO/IEC 19775-1 中定义的 indexedFaceSet 和 indexedTriangleSet。PnIndex 的使用已从 ISO-10303-42 中定义的 triangulated_surface_set 采用。
非正式命题
- 如果 Closed = TRUE,应满足与刻面边界表示相同的拓扑约束。特别是:
- 每个面应是唯一的;
- 每条边应恰好被两个面边界使用;
- 三角化面集边界上每个点的拓扑法线应指向实体材料的外部。
8.8.3.47.2 实体继承(Entity inheritance)
-
- IfcTessellatedItem
- IfcAnnotationFillArea
- IfcBooleanResult
- IfcBoundingBox
- IfcCartesianPointList
- IfcCartesianTransformationOperator
- IfcCsgPrimitive3D
- IfcCurve
- IfcDirection
- IfcFaceBasedSurfaceModel
- IfcFillAreaStyleHatching
- IfcFillAreaStyleTiles
- IfcGeometricSet
- IfcHalfSpaceSolid
- IfcLightSource
- IfcPlacement
- IfcPlanarExtent
- IfcPoint
- IfcSectionedSpine
- IfcSegment
- IfcShellBasedSurfaceModel
- IfcSolidModel
- IfcSurface
- IfcTextLiteral
- IfcVector
8.8.3.47.3 特性(Attributes)
| # | 特性(Attributes) | 类型 | 描述 |
|---|---|---|---|
| IfcRepresentationItem (2) | |||
| LayerAssignment | SET [0:1] OF IfcPresentationLayerAssignment FOR AssignedItems |
将表示项分配给单个或多个层。LayerAssignments 可以覆盖其所在的 IfcRepresentation 的 Items 列表中的 LayerAssignments。 |
|
| StyledByItem | SET [0:1] OF IfcStyledItem FOR Item |
引用为表示提供表现信息的 IfcStyledItem,例如,为几何曲线提供曲线样式,包括颜色和厚度。 |
|
| IfcTessellatedFaceSet (4) | |||
| 1 | Coordinates | IfcCartesianPointList3D |
在 IfcTessellatedFaceSet 的子类型中定义的坐标索引使用的有序笛卡尔点列表。 |
| HasColours | SET [0:1] OF IfcIndexedColourMap FOR MappedTo |
引用索引颜色映射,为 IfcTessellatedFaceSet 子类型的面提供相应的颜色 RGB 值。 |
|
| HasTextures | SET [0:?] OF IfcIndexedTextureMap FOR MappedTo |
引用索引纹理映射,为 IfcTessellatedFaceSet 子类型的面边界顶点提供相应的纹理坐标。 |
|
| * | Dim | IfcDimensionCount |
此属性是形式化派生的
此几何表示项的空间维度,始终为 3。 |
| 点击显示 6 个隐藏的继承特性 点击隐藏 6 个继承特性 | |||
| IfcTriangulatedFaceSet (5) | |||
| 2 | Normals | OPTIONAL LIST [1:?] OF LIST [3:3] OF IfcParameterValue |
法线的三个方向的有序列表。这是一个由三个参数值提供的方向二维列表。 * 第一个维度对应 Coordindex 的顶点索引 * 第二个维度恰好有三个值,[1] x方向,[2] y方向和[3] z方向 |
| 3 | Closed | OPTIONAL IfcBoolean |
指示面集是封闭壳(TRUE)还是开放壳(FALSE)。如果省略,则无法断言此类信息。 |
| 4 | CoordIndex | LIST [1:?] OF LIST [3:3] OF IfcPositiveInteger |
基于索引的三角形的二维列表,其中: * 第一个维度表示三角形(从1到N) * 第二个维度恰好有三个值,表示三个顶点点的索引(从1到3)。
|
| 5 | PnIndex | OPTIONAL LIST [1:?] OF IfcPositiveInteger |
定义 IfcCartesianPointList3D 中位置的整数列表,以获取 CoordIndex 内索引的点坐标。如果未提供 PnIndex,则索引直接指向 IfcCartesianPointList3D。 |
| * | NumberOfTriangles | IfcInteger |
此属性是形式化派生的
用于此三角化的三角形数量的派生值。 |
8.8.3.47.4 形式化表示(Formal representation)
ENTITY IfcTriangulatedFaceSet
SUPERTYPE OF (ONEOF
(IfcTriangulatedIrregularNetwork))
SUBTYPE OF (IfcTessellatedFaceSet);
Normals : OPTIONAL LIST [1:?] OF LIST [3:3] OF IfcParameterValue;
Closed : OPTIONAL IfcBoolean;
CoordIndex : LIST [1:?] OF LIST [3:3] OF IfcPositiveInteger;
PnIndex : OPTIONAL LIST [1:?] OF IfcPositiveInteger;
DERIVE
NumberOfTriangles : IfcInteger := SIZEOF(CoordIndex);
END_ENTITY;