IfcTriangulatedFaceSet是一个镶嵌细分的面集,所有面都由三角形绑定。面由三个笛卡尔点定义的隐式多段线构造。每个点的坐标由一个基于1的索引提供到二维列表CoordIndex提供的笛卡尔点的有序列表中,其中
①二维列表的第一个维度处理三角形面的列表;
②二维列表的第二个维度正好为IfcCartesianPointList提供了三个索引,这些索引由在超类型IfcTessellatedFaceSet中定义的坐标引用。每个索引指向一个笛卡尔点作为三角形的顶点。
可选每个顶点处的法线可以由二维列表NormalIndex提供,其中
①二维列表的第一维处理相应的三角形面列表;
②二维列表的第二个维度为在超类型IfcTessellatedFaceSet中定义的二维列表法线提供了三个索引。与顶点索引相对应的每个索引都指向三角形顶点处的法线方向。
如果对应的点和法线列表中的点的顺序与法线中的法线的顺序相同,则应使用单个索引列表。坐标索引列表将同时应用于点和法线,法线索引列表应为空。换言之,如果not empty中的法线列表和NormalIndex列表为空,则CoordIndex列表将用于指向CoordList和Normals列表中的相应位置。
注意:使用相应的点和法线列表可以只使用一个索引列表,而这会牺牲点和顶点的非唯一集合。
图显示了不带注释的IfcTriangulatedFaceSet的使用。IfcTriangulatedFaceSet的图表示索引和索引指向的有序列表。索引从1开始(索引为1到N),如果CoordIndex中的最大索引为N,则IfcCartesianPointList应具有3:3坐标的N个列表。
图-三角面集
实例化IfcTriangulatedFaceSet有三种可能,除了通过Coordinates和CoordIndex强制属性CoordList之外,可选属性有以下组合:
①Normals和NormalIndex都提供了,然后NormalIndex指向法线
②提供法线而不提供NormalIndex,则CoordIndex也指向法线
③法线和法线索引都未提供,则必须重新计算法线。
图-三角形面集几何图形
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
IFC4中增加的新实体。
# | Attribute | Type | Cardinality | Description | C |
---|---|---|---|---|---|
IfcRepresentationItem | |||||
LayerAssignment | IfcPresentationLayerAssignment @AssignedItems |
S[0:1] | Assignment of the representation item to a single or multiple layer(s). The LayerAssignments can override a LayerAssignments of the IfcRepresentation it is used within the list of Items. | X | |
StyledByItem | IfcStyledItem @Item |
S[0:1] | Reference to the IfcStyledItem that provides presentation information to the representation, e.g. a curve style, including colour and thickness to a geometric curve. | X | |
IfcGeometricRepresentationItem | |||||
IfcTessellatedItem | |||||
IfcTessellatedFaceSet | |||||
1 | Coordinates | IfcCartesianPointList3D | [1:1] | An ordered list of Cartesian points used by the coordinate index defined at the subtypes of IfcTessellatedFaceSet. | X |
2 | Normals | IfcParameterValue | L[1:?]L[3:3] | An ordered list of directions used by the normal index defined at the subtypes of IfcTessellatedFaceSet. It is a two-dimensional list of directions provided by three parameter values. | X |
3 | Closed | IfcBoolean | [0:1] | Indication whether the IfcTessellatedFaceSet is a closed shell or not. If omited no such information can be provided. | X |
HasColours | IfcIndexedColourMap @MappedTo |
S[0:1] | Reference to the indexed colour map providing the corresponding colour RGB values to the faces of the subtypes of IfcTessellatedFaceSet. | X | |
HasTextures | IfcIndexedTextureMap @MappedTo |
S[0:?] | Reference to the indexed texture map providing the corresponding texture coordinates to the vertices bounding the faces of the subtypes of IfcTessellatedFaceSet. | X | |
IfcTriangulatedFaceSet | |||||
4 | CoordIndex | IfcPositiveInteger | L[1:?]L[3:3] |
Two-dimensional list, where the first dimension represents the triangles (from 1 to N) and the second dimension the indices to
three points defining the vertices (from 1 to 3).
NOTE The coordinates of the vertices are provided by the indexed list of SELFIfcTessellatedFaceSet.Coordinates.CoordList. |
X |
5 | NormalIndex | IfcPositiveInteger | L[1:?]L[3:3] |
Two-dimensional list, where the first dimension represents the triangle (from 1 to N) and the second dimension the indices to
three normals (from 1 to 3) corresponding to the vertices.
The directions of the normals are provided by the indexed list of SELFIfcTessellatedFaceSet.Normals. |
X |
NumberOfTriangles :=SIZEOF(CoordIndex) |
IfcInteger | [1:1] | Derived number of triangles used for this triangulation. | X |
EXPRESS Specification
ENTITY IfcTriangulatedFaceSet
SUBTYPE OF (IfcTessellatedFaceSet);
CoordIndex : LIST [1:?] OF LIST [3:3] OF IfcPositiveInteger;
NormalIndex : OPTIONAL LIST [1:?] OF LIST [3:3] OF IfcPositiveInteger;
DERIVE
NumberOfTriangles : IfcInteger := SIZEOF(CoordIndex);
END_ENTITY;