style.assign_representation_styles to support topology reprensentations #4038

This commit is contained in:
Andrej730
2024-09-09 16:54:05 +05:00
parent 2d988ac445
commit 27b9709b78
2 changed files with 19 additions and 2 deletions
@@ -121,10 +121,12 @@ class Usecase:
replace_previous_same_type_style = self.settings["replace_previous_same_type_style"]
for element in self.file.traverse(self.settings["shape_representation"]):
if not element.is_a("IfcShapeRepresentation"):
if not element.is_a("IfcShapeModel"):
continue
for item in element.Items:
if not item.is_a("IfcGeometricRepresentationItem"):
if not item.is_a("IfcGeometricRepresentationItem") and not item.is_a(
"IfcTopologicalRepresentationItem"
):
continue
if self.settings["styles"]:
# If there are more items than styles, fallback to using the last style
@@ -103,6 +103,21 @@ class TestAssignRepresentationStyles(test.bootstrap.IFC4):
assert item.StyledByItem[0].Styles[0].Styles == (style2, style3)
assert len(self.file.by_type("IfcStyledItem")) == 1
def test_assign_style_to_topology_representation(self):
element = ifcopenshell.api.root.create_entity(self.file, ifc_class="IfcWall")
product_shape = self.file.create_entity("IfcProductDefinitionShape")
element.Representation = product_shape
representation = self.file.create_entity("IfcTopologyRepresentation")
item = self.file.create_entity("IfcFace")
representation.Items = [item]
style = self.file.create_entity("IfcSurfaceStyle")
ifcopenshell.api.style.assign_representation_styles(
self.file, styles=[style], shape_representation=representation
)
assert item.StyledByItem[0].Styles == (style,)
class TestAssignRepresentationStylesIFC2X3(test.bootstrap.IFC2X3):
def test_run(self):