mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-16 13:46:54 +00:00
Deleting a material set from a type now also purges usages from type instances
This commit is contained in:
@@ -157,7 +157,7 @@ class UnassignMaterial(bpy.types.Operator):
|
|||||||
self.file,
|
self.file,
|
||||||
**{"product": self.file.by_id(obj.BIMObjectProperties.ifc_definition_id)},
|
**{"product": self.file.by_id(obj.BIMObjectProperties.ifc_definition_id)},
|
||||||
)
|
)
|
||||||
Data.load(IfcStore.get_file(), obj.BIMObjectProperties.ifc_definition_id)
|
Data.purge()
|
||||||
return {"FINISHED"}
|
return {"FINISHED"}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import ifcopenshell
|
import ifcopenshell
|
||||||
|
import ifcopenshell.util.element
|
||||||
|
|
||||||
|
|
||||||
class Usecase:
|
class Usecase:
|
||||||
@@ -9,11 +10,26 @@ class Usecase:
|
|||||||
self.settings[key] = value
|
self.settings[key] = value
|
||||||
|
|
||||||
def execute(self):
|
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:
|
for rel in self.settings["product"].HasAssociations:
|
||||||
if rel.is_a("IfcRelAssociatesMaterial"):
|
if rel.is_a("IfcRelAssociatesMaterial"):
|
||||||
if rel.RelatingMaterial.is_a("IfcMaterialLayerSetUsage") or rel.RelatingMaterial.is_a(
|
if rel.RelatingMaterial.is_a() in ["IfcMaterialLayerSetUsage", "IfcMaterialProfileSetUsage"]:
|
||||||
"IfcMaterialProfileSetUsage"
|
|
||||||
):
|
|
||||||
self.file.remove(rel.RelatingMaterial)
|
self.file.remove(rel.RelatingMaterial)
|
||||||
if len(rel.RelatedObjects) == 1:
|
if len(rel.RelatedObjects) == 1:
|
||||||
self.file.remove(rel)
|
self.file.remove(rel)
|
||||||
|
|||||||
@@ -11,7 +11,12 @@ class Usecase:
|
|||||||
|
|
||||||
def execute(self):
|
def execute(self):
|
||||||
self.added_elements = set()
|
self.added_elements = set()
|
||||||
if self.settings["element"].is_a("IfcTypeProduct") and not self.file.by_guid(self.settings["element"].GlobalId):
|
if self.settings["element"].is_a("IfcTypeProduct"):
|
||||||
|
try:
|
||||||
|
self.file.by_guid(self.settings["element"].GlobalId)
|
||||||
|
return
|
||||||
|
except:
|
||||||
|
pass
|
||||||
return self.append_type_product()
|
return self.append_type_product()
|
||||||
|
|
||||||
def append_type_product(self):
|
def append_type_product(self):
|
||||||
|
|||||||
Reference in New Issue
Block a user