mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-09 17:31:45 +00:00
Deleting a material set from a type now also purges usages from type instances
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import ifcopenshell
|
||||
import ifcopenshell.util.element
|
||||
|
||||
|
||||
class Usecase:
|
||||
@@ -9,11 +10,26 @@ class Usecase:
|
||||
self.settings[key] = value
|
||||
|
||||
def execute(self):
|
||||
if self.settings["product"].is_a("IfcTypeObject"):
|
||||
material = ifcopenshell.util.element.get_material(self.settings["product"])
|
||||
if material.is_a() in ["IfcMaterialLayerSet", "IfcMaterialProfileSet"]:
|
||||
for inverse in self.file.get_inverse(material):
|
||||
if self.file.schema == "IFC2X3":
|
||||
if not inverse.is_a("IfcMaterialLayerSetUsage"):
|
||||
continue
|
||||
for inverse2 in self.file.get_inverse(inverse):
|
||||
if inverse2.is_a("IfcRelAssociatesMaterial"):
|
||||
self.file.remove(inverse2)
|
||||
else:
|
||||
if not inverse.is_a("IfcMaterialUsageDefinition"):
|
||||
continue
|
||||
for rel in inverse.AssociatedTo:
|
||||
self.file.remove(rel)
|
||||
self.file.remove(inverse)
|
||||
|
||||
for rel in self.settings["product"].HasAssociations:
|
||||
if rel.is_a("IfcRelAssociatesMaterial"):
|
||||
if rel.RelatingMaterial.is_a("IfcMaterialLayerSetUsage") or rel.RelatingMaterial.is_a(
|
||||
"IfcMaterialProfileSetUsage"
|
||||
):
|
||||
if rel.RelatingMaterial.is_a() in ["IfcMaterialLayerSetUsage", "IfcMaterialProfileSetUsage"]:
|
||||
self.file.remove(rel.RelatingMaterial)
|
||||
if len(rel.RelatedObjects) == 1:
|
||||
self.file.remove(rel)
|
||||
|
||||
Reference in New Issue
Block a user