library.remove_library, remove_reference to support ifc2x3

This commit is contained in:
Andrej730
2024-05-13 17:44:19 +05:00
parent f2696d5352
commit 3665dda87c
2 changed files with 25 additions and 13 deletions
@@ -38,14 +38,23 @@ def remove_library(file: ifcopenshell.file, library: ifcopenshell.entity_instanc
library = ifcopenshell.api.run("library.add_library", model, name="Brickschema")
ifcopenshell.api.run("library.remove_library", model, library=library)
"""
settings = {"library": library}
for reference in set(settings["library"].HasLibraryReferences or []):
file.remove(reference)
file.remove(settings["library"])
for rel in file.by_type("IfcRelAssociatesLibrary"):
if not rel.RelatingLibrary:
history = rel.OwnerHistory
file.remove(rel)
if history:
ifcopenshell.util.element.remove_deep2(file, history)
if file.schema != "IFC2X3":
rels = []
for reference in set(library.HasLibraryReferences):
rels.extend(reference.LibraryRefForObjects)
file.remove(reference)
rels.extend(library.LibraryInfoForObjects)
file.remove(library)
else:
for reference in set(library.LibraryReference or []):
file.remove(reference)
file.remove(library)
# RelatingLibrary could either be library itself or library reference we removed
rels = [rel for rel in file.by_type("IfcRelAssociatesLibrary") if rel.RelatingLibrary is None]
for rel in rels:
history = rel.OwnerHistory
file.remove(rel)
if history:
ifcopenshell.util.element.remove_deep2(file, history)
@@ -40,11 +40,14 @@ def remove_reference(file: ifcopenshell.file, reference: ifcopenshell.entity_ins
# Let's change our mind and remove it.
ifcopenshell.api.run("library.remove_reference", model, reference=reference)
"""
settings = {"reference": reference}
if file.schema != "IFC2X3":
rels = reference.LibraryRefForObjects
else:
rels = [rel for rel in file.by_type("IfcRelAssociatesLibrary") if rel.RelatingLibrary == reference]
for rel in settings["reference"].LibraryRefForObjects:
for rel in rels:
history = rel.OwnerHistory
file.remove(rel)
if history:
ifcopenshell.util.element.remove_deep2(file, history)
file.remove(settings["reference"])
file.remove(reference)