From 17add4825449c4b3b9dcf5ab83c1fefd91f4996b Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 27 Feb 2023 19:01:51 +0500 Subject: [PATCH] Minor refactor for modifiers --- .../blenderbim/bim/module/model/door.py | 20 ++++------- .../blenderbim/bim/module/model/stair.py | 35 ++++++------------- .../blenderbim/bim/module/model/window.py | 21 ++++------- 3 files changed, 23 insertions(+), 53 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/model/door.py b/src/blenderbim/blenderbim/bim/module/model/door.py index 93b62a6228..96f366ef68 100644 --- a/src/blenderbim/blenderbim/bim/module/model/door.py +++ b/src/blenderbim/blenderbim/bim/module/model/door.py @@ -499,12 +499,9 @@ class AddDoor(bpy.types.Operator, tool.Ifc.Operator): door_data["lining_properties"] = lining_props door_data["panel_properties"] = panel_props - psets = ifcopenshell.util.element.get_psets(element) - pset = psets.get("BBIM_Door", None) + pset = tool.Pset.get_element_pset(element, "BBIM_Door") - if pset: - pset = tool.Ifc.get().by_id(pset["id"]) - else: + if not pset: pset = ifcopenshell.api.run("pset.add_pset", tool.Ifc.get(), product=element, name="BBIM_Door") ifcopenshell.api.run( @@ -525,8 +522,7 @@ class CancelEditingDoor(bpy.types.Operator, tool.Ifc.Operator): def _execute(self, context): obj = context.active_object element = tool.Ifc.get_entity(obj) - psets = ifcopenshell.util.element.get_psets(element) - data = json.loads(psets["BBIM_Door"]["Data"]) + data = json.loads(tool.Pset.get_element_pset_data(element, "BBIM_Door")["Data"]) props = obj.BIMDoorProperties # restore previous settings since editing was canceled for prop_name in data: @@ -557,8 +553,6 @@ class FinishEditingDoor(bpy.types.Operator, tool.Ifc.Operator): element = tool.Ifc.get_entity(obj) props = obj.BIMDoorProperties - psets = ifcopenshell.util.element.get_psets(element) - pset = psets["BBIM_Door"] door_data = props.get_general_kwargs() lining_props = props.get_lining_kwargs() panel_props = props.get_panel_kwargs() @@ -570,7 +564,7 @@ class FinishEditingDoor(bpy.types.Operator, tool.Ifc.Operator): update_door_modifier_representation(context) - pset = tool.Ifc.get().by_id(pset["id"]) + pset = tool.Pset.get_element_pset(element, "BBIM_Door") door_data = json.dumps(door_data, default=list) ifcopenshell.api.run("pset.edit_pset", tool.Ifc.get(), pset=pset, properties={"Data": door_data}) return {"FINISHED"} @@ -585,8 +579,7 @@ class EnableEditingDoor(bpy.types.Operator, tool.Ifc.Operator): obj = context.active_object props = obj.BIMDoorProperties element = tool.Ifc.get_entity(obj) - pset = ifcopenshell.util.element.get_psets(element) - data = json.loads(pset["BBIM_Door"]["Data"]) + data = json.loads(tool.Pset.get_element_pset_data(element, "BBIM_Door")["Data"]) data.update(data.pop("lining_properties")) data.update(data.pop("panel_properties")) @@ -615,8 +608,7 @@ class RemoveDoor(bpy.types.Operator, tool.Ifc.Operator): element = tool.Ifc.get_entity(obj) obj.BIMDoorProperties.is_editing = -1 - pset = ifcopenshell.util.element.get_psets(element) - pset = tool.Ifc.get().by_id(pset["BBIM_Door"]["id"]) + pset = tool.Pset.get_element_pset(element, "BBIM_Door") ifcopenshell.api.run("pset.remove_pset", tool.Ifc.get(), pset=pset) props.door_added_previously = True diff --git a/src/blenderbim/blenderbim/bim/module/model/stair.py b/src/blenderbim/blenderbim/bim/module/model/stair.py index d430296a43..da7c6a10ca 100644 --- a/src/blenderbim/blenderbim/bim/module/model/stair.py +++ b/src/blenderbim/blenderbim/bim/module/model/stair.py @@ -251,7 +251,7 @@ def update_stair_modifier(context): obj.data.update() -def update_ifc_stair_props(obj, psets): +def update_ifc_stair_props(obj): element = tool.Ifc.get_entity(obj) props = obj.BIMStairProperties ifc_file = tool.Ifc.get() @@ -266,10 +266,8 @@ def update_ifc_stair_props(obj, psets): element.TreadLength = props.tread_depth # update pset with ifc properties - pset_common = psets.get("Pset_StairFlightCommon", None) - if pset_common: - pset_common = ifc_file.by_id(pset_common["id"]) - else: + pset_common = tool.Pset.get_element_pset(element, "Pset_StairFlightCommon") + if not pset_common: pset_common = ifcopenshell.api.run("pset.add_pset", ifc_file, product=element, name="Pset_StairFlightCommon") ifcopenshell.api.run( @@ -349,12 +347,8 @@ class AddStair(bpy.types.Operator, tool.Ifc.Operator): ) stair_data = props.get_props_kwargs() - psets = ifcopenshell.util.element.get_psets(element) - pset = psets.get("BBIM_Stair", None) - - if pset: - pset = ifc_file.by_id(pset["id"]) - else: + pset = tool.Pset.get_element_pset(element, "BBIM_Stair") + if not pset: pset = ifcopenshell.api.run("pset.add_pset", ifc_file, product=element, name="BBIM_Stair") ifcopenshell.api.run( @@ -364,7 +358,7 @@ class AddStair(bpy.types.Operator, tool.Ifc.Operator): properties={"Data": json.dumps(stair_data)}, ) update_stair_modifier(context) - update_ifc_stair_props(obj, psets) + update_ifc_stair_props(obj) class CancelEditingStair(bpy.types.Operator, tool.Ifc.Operator): @@ -375,8 +369,7 @@ class CancelEditingStair(bpy.types.Operator, tool.Ifc.Operator): def _execute(self, context): obj = context.active_object element = tool.Ifc.get_entity(obj) - psets = ifcopenshell.util.element.get_psets(element) - data = json.loads(psets["BBIM_Stair"]["Data"]) + data = json.loads(tool.Pset.get_element_pset_data(element, "BBIM_Stair")["Data"]) props = obj.BIMStairProperties # restore previous settings since editing was canceled for prop_name in data: @@ -398,21 +391,17 @@ class FinishEditingStair(bpy.types.Operator, tool.Ifc.Operator): element = tool.Ifc.get_entity(obj) props = obj.BIMStairProperties - psets = ifcopenshell.util.element.get_psets(element) - pset = psets["BBIM_Stair"] data = props.get_props_kwargs() - props.is_editing = -1 - update_stair_modifier(context) - pset = tool.Ifc.get().by_id(pset["id"]) + pset = tool.Pset.get_element_pset(element, "BBIM_Stair") data = json.dumps(data) ifcopenshell.api.run("pset.edit_pset", tool.Ifc.get(), pset=pset, properties={"Data": data}) # update IfcStairFlight properties element.PredefinedType = "STRAIGHT" - update_ifc_stair_props(obj, psets) + update_ifc_stair_props(obj) return {"FINISHED"} @@ -425,8 +414,7 @@ class EnableEditingStair(bpy.types.Operator, tool.Ifc.Operator): obj = context.active_object props = obj.BIMStairProperties element = tool.Ifc.get_entity(obj) - pset = ifcopenshell.util.element.get_psets(element) - data = json.loads(pset["BBIM_Stair"]["Data"]) + data = json.loads(tool.Pset.get_element_pset_data(element, "BBIM_Stair")["Data"]) # required since we could load pset from .ifc and BIMStairProperties won't be set for prop_name in data: setattr(props, prop_name, data[prop_name]) @@ -452,8 +440,7 @@ class RemoveStair(bpy.types.Operator, tool.Ifc.Operator): element = tool.Ifc.get_entity(obj) obj.BIMStairProperties.is_editing = -1 - pset = ifcopenshell.util.element.get_psets(element) - pset = tool.Ifc.get().by_id(pset["BBIM_Stair"]["id"]) + pset = tool.Pset.get_element_pset(element, "BBIM_Stair") ifcopenshell.api.run("pset.remove_pset", tool.Ifc.get(), pset=pset) props.stair_added_previously = True diff --git a/src/blenderbim/blenderbim/bim/module/model/window.py b/src/blenderbim/blenderbim/bim/module/model/window.py index e601b0f1ba..043df66f0f 100644 --- a/src/blenderbim/blenderbim/bim/module/model/window.py +++ b/src/blenderbim/blenderbim/bim/module/model/window.py @@ -465,12 +465,8 @@ class AddWindow(bpy.types.Operator, tool.Ifc.Operator): window_data["lining_properties"] = lining_props window_data["panel_properties"] = panel_props - psets = ifcopenshell.util.element.get_psets(element) - pset = psets.get("BBIM_Window", None) - - if pset: - pset = tool.Ifc.get().by_id(pset["id"]) - else: + pset = tool.Pset.get_element_pset(element, "BBIM_Window") + if not pset: pset = ifcopenshell.api.run("pset.add_pset", tool.Ifc.get(), product=element, name="BBIM_Window") ifcopenshell.api.run( @@ -491,8 +487,7 @@ class CancelEditingWindow(bpy.types.Operator, tool.Ifc.Operator): def _execute(self, context): obj = context.active_object element = tool.Ifc.get_entity(obj) - psets = ifcopenshell.util.element.get_psets(element) - data = json.loads(psets["BBIM_Window"]["Data"]) + data = json.loads(tool.Pset.get_element_pset_data(element, "BBIM_Window")["Data"]) props = obj.BIMWindowProperties for prop_name in data: setattr(props, prop_name, data[prop_name]) @@ -522,8 +517,6 @@ class FinishEditingWindow(bpy.types.Operator, tool.Ifc.Operator): element = tool.Ifc.get_entity(obj) props = obj.BIMWindowProperties - psets = ifcopenshell.util.element.get_psets(element) - pset = psets["BBIM_Window"] window_data = props.get_general_kwargs() lining_props = props.get_lining_kwargs() panel_props = props.get_panel_kwargs() @@ -535,7 +528,7 @@ class FinishEditingWindow(bpy.types.Operator, tool.Ifc.Operator): update_window_modifier_representation(context) - pset = tool.Ifc.get().by_id(pset["id"]) + pset = tool.Pset.get_element_pset(element, "BBIM_Window") window_data = json.dumps(window_data, default=list) ifcopenshell.api.run("pset.edit_pset", tool.Ifc.get(), pset=pset, properties={"Data": window_data}) return {"FINISHED"} @@ -550,8 +543,7 @@ class EnableEditingWindow(bpy.types.Operator, tool.Ifc.Operator): obj = context.active_object props = obj.BIMWindowProperties element = tool.Ifc.get_entity(obj) - pset = ifcopenshell.util.element.get_psets(element) - data = json.loads(pset["BBIM_Window"]["Data"]) + data = json.loads(tool.Pset.get_element_pset_data(element, "BBIM_Window")["Data"]) data.update(data.pop("lining_properties")) data.update(data.pop("panel_properties")) @@ -580,8 +572,7 @@ class RemoveWindow(bpy.types.Operator, tool.Ifc.Operator): element = tool.Ifc.get_entity(obj) obj.BIMWindowProperties.is_editing = -1 - pset = ifcopenshell.util.element.get_psets(element) - pset = tool.Ifc.get().by_id(pset["BBIM_Window"]["id"]) + pset = tool.Pset.get_element_pset(element, "BBIM_Window") ifcopenshell.api.run("pset.remove_pset", tool.Ifc.get(), pset=pset) props.window_added_previously = True