Skip to content

Commit fe6d9ae

Browse files
committed
Triangulated face set geometry exports are now supported.
1 parent 4a67981 commit fe6d9ae

1 file changed

Lines changed: 21 additions & 0 deletions

File tree

src/ifcopenshell-python/ifcopenshell/api/geometry/add_representation.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)