From 4ab23d231db7341f54e0e5934223f26db3db46d9 Mon Sep 17 00:00:00 2001 From: bosonprojets Date: Wed, 28 Apr 2021 12:43:14 +0000 Subject: [PATCH] Usecase to Unassign object aggregation in the ifcopenshell.api --- .../bim/module/sequence/operator.py | 1 + .../api/aggregate/unassign_object.py | 25 +++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 src/ifcopenshell-python/ifcopenshell/api/aggregate/unassign_object.py diff --git a/src/blenderbim/blenderbim/bim/module/sequence/operator.py b/src/blenderbim/blenderbim/bim/module/sequence/operator.py index 1bfd302b23..283621494c 100644 --- a/src/blenderbim/blenderbim/bim/module/sequence/operator.py +++ b/src/blenderbim/blenderbim/bim/module/sequence/operator.py @@ -44,6 +44,7 @@ class EditWorkPlan(bpy.types.Operator): **{"work_plan": self.file.by_id(props.active_work_plan_id), "attributes": attributes}, ) Data.load(IfcStore.get_file()) + bpy.ops.bim.disable_editing_work_plan() return {"FINISHED"} diff --git a/src/ifcopenshell-python/ifcopenshell/api/aggregate/unassign_object.py b/src/ifcopenshell-python/ifcopenshell/api/aggregate/unassign_object.py new file mode 100644 index 0000000000..9034defc29 --- /dev/null +++ b/src/ifcopenshell-python/ifcopenshell/api/aggregate/unassign_object.py @@ -0,0 +1,25 @@ +import ifcopenshell +import ifcopenshell.api + + +class Usecase: + def __init__(self, file, **settings): + self.file = file + self.settings = { + "relating_object": None, + "product": None, + } + for key, value in settings.items(): + self.settings[key] = value + + def execute(self): + for rel in self.settings["product"].Decomposes or []: + if not rel.is_a("IfcRelAggregates") or rel.RelatingObject != self.settings["relating_object"]: + continue + if len(rel.RelatedObjects) == 1: + return self.file.remove(rel) + related_objects = list(rel.RelatedObjects) + related_objects.remove(self.settings["product"]) + rel.RelatedObjects = related_objects + ifcopenshell.api.run("owner.update_owner_history", self.file, **{"element": rel}) + return rel