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") library = ifcopenshell.api.run("library.add_library", model, name="Brickschema")
ifcopenshell.api.run("library.remove_library", model, library=library) ifcopenshell.api.run("library.remove_library", model, library=library)
""" """
settings = {"library": library}
for reference in set(settings["library"].HasLibraryReferences or []): if file.schema != "IFC2X3":
file.remove(reference) rels = []
file.remove(settings["library"]) for reference in set(library.HasLibraryReferences):
for rel in file.by_type("IfcRelAssociatesLibrary"): rels.extend(reference.LibraryRefForObjects)
if not rel.RelatingLibrary: file.remove(reference)
history = rel.OwnerHistory rels.extend(library.LibraryInfoForObjects)
file.remove(rel) file.remove(library)
if history: else:
ifcopenshell.util.element.remove_deep2(file, history) 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. # Let's change our mind and remove it.
ifcopenshell.api.run("library.remove_reference", model, reference=reference) 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 history = rel.OwnerHistory
file.remove(rel) file.remove(rel)
if history: if history:
ifcopenshell.util.element.remove_deep2(file, history) ifcopenshell.util.element.remove_deep2(file, history)
file.remove(settings["reference"]) file.remove(reference)