mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-09 17:31:45 +00:00
resource.remove_resource - fix bug not removing orphaned ifcrelnests
This commit is contained in:
@@ -36,22 +36,25 @@ def remove_resource(file: ifcopenshell.file, resource: ifcopenshell.entity_insta
|
|||||||
"""
|
"""
|
||||||
settings = {"resource": resource}
|
settings = {"resource": resource}
|
||||||
|
|
||||||
|
def remove_consider_history(root: ifcopenshell.entity_instance) -> None:
|
||||||
|
history = root.OwnerHistory
|
||||||
|
file.remove(root)
|
||||||
|
if history:
|
||||||
|
ifcopenshell.util.element.remove_deep2(file, history)
|
||||||
|
|
||||||
# TODO: review deep purge
|
# TODO: review deep purge
|
||||||
for inverse in file.get_inverse(settings["resource"]):
|
for inverse in file.get_inverse(settings["resource"]):
|
||||||
if inverse.is_a("IfcRelNests"):
|
if inverse.is_a("IfcRelNests"):
|
||||||
if inverse.RelatingObject == settings["resource"]:
|
if inverse.RelatingObject == settings["resource"]:
|
||||||
for related_object in inverse.RelatedObjects:
|
for related_object in inverse.RelatedObjects:
|
||||||
ifcopenshell.api.resource.remove_resource(file, resource=related_object)
|
ifcopenshell.api.resource.remove_resource(file, resource=related_object)
|
||||||
history = inverse.OwnerHistory
|
remove_consider_history(inverse)
|
||||||
file.remove(inverse)
|
elif inverse.RelatedObjects == (resource,):
|
||||||
if history:
|
remove_consider_history(inverse)
|
||||||
ifcopenshell.util.element.remove_deep2(file, history)
|
|
||||||
elif inverse.is_a("IfcRelAssignsToControl"):
|
elif inverse.is_a("IfcRelAssignsToControl"):
|
||||||
if len(inverse.RelatedObjects) == 1:
|
if len(inverse.RelatedObjects) == 1:
|
||||||
history = inverse.OwnerHistory
|
remove_consider_history(inverse)
|
||||||
file.remove(inverse)
|
|
||||||
if history:
|
|
||||||
ifcopenshell.util.element.remove_deep2(file, history)
|
|
||||||
else:
|
else:
|
||||||
related_objects = list(inverse.RelatedObjects)
|
related_objects = list(inverse.RelatedObjects)
|
||||||
related_objects.remove(settings["resource"])
|
related_objects.remove(settings["resource"])
|
||||||
@@ -63,16 +66,10 @@ def remove_resource(file: ifcopenshell.file, resource: ifcopenshell.entity_insta
|
|||||||
file, related_object=related_object, relating_resource=settings["resource"]
|
file, related_object=related_object, relating_resource=settings["resource"]
|
||||||
)
|
)
|
||||||
elif inverse.RelatedObjects == tuple(settings["resource"]):
|
elif inverse.RelatedObjects == tuple(settings["resource"]):
|
||||||
history = inverse.OwnerHistory
|
remove_consider_history(inverse)
|
||||||
file.remove(inverse)
|
|
||||||
if history:
|
|
||||||
ifcopenshell.util.element.remove_deep2(file, history)
|
|
||||||
# Usage was added in IFC4.
|
# Usage was added in IFC4.
|
||||||
if usage := getattr(settings["resource"], "Usage", None):
|
if usage := getattr(settings["resource"], "Usage", None):
|
||||||
file.remove(usage)
|
file.remove(usage)
|
||||||
if settings["resource"].BaseQuantity:
|
if settings["resource"].BaseQuantity:
|
||||||
ifcopenshell.api.resource.remove_resource_quantity(file, resource=settings["resource"])
|
ifcopenshell.api.resource.remove_resource_quantity(file, resource=settings["resource"])
|
||||||
history = settings["resource"].OwnerHistory
|
remove_consider_history(resource)
|
||||||
file.remove(settings["resource"])
|
|
||||||
if history:
|
|
||||||
ifcopenshell.util.element.remove_deep2(file, history)
|
|
||||||
|
|||||||
Reference in New Issue
Block a user