Do not copy presentation styles when copying a material

Ideally, presentation styles are reused. For example, 5 types of concrete can all use the same presentation
This commit is contained in:
Dion Moult
2024-05-25 15:14:07 +10:00
parent 16c5fd56ca
commit fd62ba63a5
2 changed files with 5 additions and 1 deletions
@@ -29,6 +29,9 @@ def copy_material(file: ifcopenshell.file, material: ifcopenshell.entity_instanc
If a material set is copied, the set items are also copied. However the
underlying materials (and profiles) used within the set items are reused.
If a material is associated with a presentation style, that presentation
style is reused.
:param material: The IfcMaterialDefinition to copy
:type material: ifcopenshell.entity_instance
:return: The new copy of the material
@@ -92,7 +95,7 @@ def _copy_material_with_inverses(file, material):
elif inverse.is_a("IfcMaterialDefinitionRepresentation"):
inverse = ifcopenshell.util.element.copy_deep(
file, inverse, exclude=["IfcRepresentationContext", "IfcMaterial"]
file, inverse, exclude=["IfcRepresentationContext", "IfcMaterial", "IfcPresentationStyle"]
)
inverse.RepresentedMaterial = new
return new
@@ -67,6 +67,7 @@ class TestCopyMaterial(test.bootstrap.IFC4):
ifcopenshell.api.run("style.assign_material_style", self.file, material=material, style=style, context=context)
new = ifcopenshell.api.run("material.copy_material", self.file, material=material)
assert new.Name == "CON01"
assert len(self.file.by_type("IfcPresentationStyle")) == 1
assert len(self.file.by_type("IfcMaterialDefinitionRepresentation")) == 2
assert new.HasRepresentation[0] != material.HasRepresentation[0]
assert new.HasRepresentation[0].Representations[0] != material.HasRepresentation[0].Representations[0]