From 3665dda87c85b2bbe78c13238ca203ff759edec6 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 13 May 2024 17:44:19 +0500 Subject: [PATCH] library.remove_library, remove_reference to support ifc2x3 --- .../api/library/remove_library.py | 29 ++++++++++++------- .../api/library/remove_reference.py | 9 ++++-- 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/src/ifcopenshell-python/ifcopenshell/api/library/remove_library.py b/src/ifcopenshell-python/ifcopenshell/api/library/remove_library.py index d0c6cc4cc5..4f5037f4d6 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/library/remove_library.py +++ b/src/ifcopenshell-python/ifcopenshell/api/library/remove_library.py @@ -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) diff --git a/src/ifcopenshell-python/ifcopenshell/api/library/remove_reference.py b/src/ifcopenshell-python/ifcopenshell/api/library/remove_reference.py index 0b5ad42d1a..59ac1eafaa 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/library/remove_reference.py +++ b/src/ifcopenshell-python/ifcopenshell/api/library/remove_reference.py @@ -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)