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 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. 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 :param material: The IfcMaterialDefinition to copy
:type material: ifcopenshell.entity_instance :type material: ifcopenshell.entity_instance
:return: The new copy of the material :return: The new copy of the material
@@ -92,7 +95,7 @@ def _copy_material_with_inverses(file, material):
elif inverse.is_a("IfcMaterialDefinitionRepresentation"): elif inverse.is_a("IfcMaterialDefinitionRepresentation"):
inverse = ifcopenshell.util.element.copy_deep( inverse = ifcopenshell.util.element.copy_deep(
file, inverse, exclude=["IfcRepresentationContext", "IfcMaterial"] file, inverse, exclude=["IfcRepresentationContext", "IfcMaterial", "IfcPresentationStyle"]
) )
inverse.RepresentedMaterial = new inverse.RepresentedMaterial = new
return 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) 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) new = ifcopenshell.api.run("material.copy_material", self.file, material=material)
assert new.Name == "CON01" assert new.Name == "CON01"
assert len(self.file.by_type("IfcPresentationStyle")) == 1
assert len(self.file.by_type("IfcMaterialDefinitionRepresentation")) == 2 assert len(self.file.by_type("IfcMaterialDefinitionRepresentation")) == 2
assert new.HasRepresentation[0] != material.HasRepresentation[0] assert new.HasRepresentation[0] != material.HasRepresentation[0]
assert new.HasRepresentation[0].Representations[0] != material.HasRepresentation[0].Representations[0] assert new.HasRepresentation[0].Representations[0] != material.HasRepresentation[0].Representations[0]