From a83c4b289653d0678014886df9d2691b96c2ed9a Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 17 Mar 2023 17:32:36 +0500 Subject: [PATCH] Stair, roof, railing - auto updating representation when creating one or update it So basically there should be no need to manually update representation after you created one of the objects from ifc modifiers. --- src/blenderbim/blenderbim/bim/module/model/railing.py | 7 ++++++- src/blenderbim/blenderbim/bim/module/model/roof.py | 8 +++++++- src/blenderbim/blenderbim/bim/module/model/stair.py | 6 +++++- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/model/railing.py b/src/blenderbim/blenderbim/bim/module/model/railing.py index 931aff13ff..e93b5bf2e4 100644 --- a/src/blenderbim/blenderbim/bim/module/model/railing.py +++ b/src/blenderbim/blenderbim/bim/module/model/railing.py @@ -54,6 +54,9 @@ def bm_split_edge_at_offset(edge, offset): def update_railing_modifier_ifc_data(context): + """should be called after new geometry settled + since it's going to update ifc representation + """ obj = context.active_object props = obj.BIMRailingProperties element = tool.Ifc.get_entity(obj) @@ -79,6 +82,7 @@ def update_railing_modifier_ifc_data(context): "Height": props.height, }, ) + tool.Ifc.edit(obj) def update_bbim_railing_pset(element, railing_data): @@ -262,8 +266,8 @@ class AddRailing(bpy.types.Operator, tool.Ifc.Operator): update_bbim_railing_pset(element, railing_data) refresh() - update_railing_modifier_ifc_data(context) update_railing_modifier_bmesh(context) + update_railing_modifier_ifc_data(context) return {"FINISHED"} @@ -403,6 +407,7 @@ class FinishEditingRailingPath(bpy.types.Operator, tool.Ifc.Operator): update_railing_modifier_bmesh(context) if bpy.context.object.mode == "EDIT": bpy.ops.object.mode_set(mode="OBJECT") + update_railing_modifier_ifc_data(context) return {"FINISHED"} diff --git a/src/blenderbim/blenderbim/bim/module/model/roof.py b/src/blenderbim/blenderbim/bim/module/model/roof.py index bf3aa2aad1..591f84ec14 100644 --- a/src/blenderbim/blenderbim/bim/module/model/roof.py +++ b/src/blenderbim/blenderbim/bim/module/model/roof.py @@ -139,6 +139,9 @@ def bm_get_indices(sequence): def update_roof_modifier_ifc_data(context): + """should be called after new geometry settled + since it's going to update ifc representation + """ obj = context.active_object props = obj.BIMRoofProperties element = tool.Ifc.get_entity(obj) @@ -151,6 +154,8 @@ def update_roof_modifier_ifc_data(context): # TODO: add Qto_RoofBaseQuantities, need to calculate GrossArea, NetArea, ProjectedArea # https://ifc43-docs.standards.buildingsmart.org/IFC/RELEASE/IFC4x3/HTML/lexical/Qto_RoofBaseQuantities.htm + tool.Ifc.edit(obj) + def update_bbim_roof_pset(element, roof_data): pset = tool.Pset.get_element_pset(element, "BBIM_Roof") @@ -295,9 +300,9 @@ class AddRoof(bpy.types.Operator, tool.Ifc.Operator): roof_data["path_data"] = path_data update_bbim_roof_pset(element, roof_data) - update_roof_modifier_ifc_data(context) refresh() update_roof_modifier_bmesh(context) + update_roof_modifier_ifc_data(context) return {"FINISHED"} @@ -437,6 +442,7 @@ class FinishEditingRoofPath(bpy.types.Operator, tool.Ifc.Operator): update_roof_modifier_bmesh(context) if bpy.context.object.mode == "EDIT": bpy.ops.object.mode_set(mode="OBJECT") + update_roof_modifier_ifc_data(context) return {"FINISHED"} diff --git a/src/blenderbim/blenderbim/bim/module/model/stair.py b/src/blenderbim/blenderbim/bim/module/model/stair.py index b61980e4e3..86a1d03c26 100644 --- a/src/blenderbim/blenderbim/bim/module/model/stair.py +++ b/src/blenderbim/blenderbim/bim/module/model/stair.py @@ -252,10 +252,14 @@ def update_stair_modifier(context): def update_ifc_stair_props(obj): + """should be called after new geometry settled + since it's going to update ifc representation + """ element = tool.Ifc.get_entity(obj) props = obj.BIMStairProperties ifc_file = tool.Ifc.get() + element.PredefinedType = "STRAIGHT" number_of_risers = props.number_of_treads + 1 # update IfcStairFlight properties (seems already deprecated but keep it for now) # http://ifc43-docs.standards.buildingsmart.org/IFC/RELEASE/IFC4x3/HTML/lexical/IfcStairFlight.htm @@ -281,6 +285,7 @@ def update_ifc_stair_props(obj): "TreadLength": props.tread_depth, }, ) + tool.Ifc.edit(obj) class BIM_OT_add_clever_stair(bpy.types.Operator, tool.Ifc.Operator): @@ -400,7 +405,6 @@ class FinishEditingStair(bpy.types.Operator, tool.Ifc.Operator): 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) return {"FINISHED"}