mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-24 22:10:00 +00:00
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:
@@ -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]
|
||||||
|
|||||||
Reference in New Issue
Block a user