@@ -474,6 +474,8 @@ def create_material_profile_set_extrusion_representation(self):
474474 def create_mesh_representation (self ):
475475 if self .file .schema == "IFC2X3" or self .settings ["should_force_faceted_brep" ]:
476476 return self .create_faceted_brep ()
477+ if self .settings ["should_force_triangulation" ]:
478+ return self .create_triangulated_face_set ()
477479 return self .create_polygonal_face_set ()
478480
479481 def create_faceted_brep (self ):
@@ -501,6 +503,25 @@ def create_faceted_brep(self):
501503 items ,
502504 )
503505
506+ def create_triangulated_face_set (self ):
507+ ifc_raw_items = [None ] * self .settings ["total_items" ]
508+ for i , value in enumerate (ifc_raw_items ):
509+ ifc_raw_items [i ] = []
510+ for polygon in self .settings ["geometry" ].polygons :
511+ ifc_raw_items [polygon .material_index % self .settings ["total_items" ]].append (
512+ [v + 1 for v in polygon .vertices ]
513+ )
514+ coordinates = self .file .createIfcCartesianPointList3D (
515+ [self .convert_si_to_unit (v .co ) for v in self .settings ["geometry" ].vertices ]
516+ )
517+ items = [self .file .createIfcTriangulatedFaceSet (coordinates , None , None , i ) for i in ifc_raw_items if i ]
518+ return self .file .createIfcShapeRepresentation (
519+ self .settings ["context" ],
520+ self .settings ["context" ].ContextIdentifier ,
521+ "Tessellation" ,
522+ items ,
523+ )
524+
504525 def create_polygonal_face_set (self ):
505526 ifc_raw_items = [None ] * self .settings ["total_items" ]
506527 for i , value in enumerate (ifc_raw_items ):
0 commit comments