mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-09 09:21:46 +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,
|
||||
**{"product": self.file.by_id(obj.BIMObjectProperties.ifc_definition_id)},
|
||||
)
|
||||
Data.load(IfcStore.get_file(), obj.BIMObjectProperties.ifc_definition_id)
|
||||
Data.purge()
|
||||
return {"FINISHED"}
|
||||
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -11,7 +11,12 @@ class Usecase:
|
||||
|
||||
def execute(self):
|
||||
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()
|
||||
|
||||
def append_type_product(self):
|
||||
|
||||
Reference in New Issue
Block a user