From 38f7c044a342c036a79f10cac8a0bff7215fdbbc Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 13 Jul 2023 14:32:09 +0500 Subject: [PATCH] Fixed error on canceling editing railing/roof Since we do not update representation for railing / roofs and just mark them wtih `tool.Ifc.edit(obj)` their previous representation may still be incorrect. So we restore the previous representation just using bmesh update method. For example if create a new roof, enter editing roof properties mode and then cancel editing, then it would result in "Failed to process a shape" because roof still had just empty Body/PointCloud representation. --- .../blenderbim/bim/module/model/railing.py | 15 +++------------ .../blenderbim/bim/module/model/roof.py | 13 ++----------- 2 files changed, 5 insertions(+), 23 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/model/railing.py b/src/blenderbim/blenderbim/bim/module/model/railing.py index 628a2baa3a..71c07a986b 100644 --- a/src/blenderbim/blenderbim/bim/module/model/railing.py +++ b/src/blenderbim/blenderbim/bim/module/model/railing.py @@ -369,20 +369,11 @@ class CancelEditingRailing(bpy.types.Operator, tool.Ifc.Operator): element = tool.Ifc.get_entity(obj) data = json.loads(ifcopenshell.util.element.get_pset(element, "BBIM_Railing", "Data")) props = obj.BIMRailingProperties + # restore previous settings since editing was canceled props.set_props_kwargs_from_ifc_data(data) - - body = ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW") - blenderbim.core.geometry.switch_representation( - tool.Ifc, - tool.Geometry, - obj=obj, - representation=body, - should_reload=True, - is_global=True, - should_sync_changes_first=False, - ) - + update_railing_modifier_bmesh(context) + props.is_editing = False return {"FINISHED"} diff --git a/src/blenderbim/blenderbim/bim/module/model/roof.py b/src/blenderbim/blenderbim/bim/module/model/roof.py index f6d2cef7be..f3d90c0c73 100644 --- a/src/blenderbim/blenderbim/bim/module/model/roof.py +++ b/src/blenderbim/blenderbim/bim/module/model/roof.py @@ -611,19 +611,10 @@ class CancelEditingRoof(bpy.types.Operator, tool.Ifc.Operator): element = tool.Ifc.get_entity(obj) data = json.loads(ifcopenshell.util.element.get_pset(element, "BBIM_Roof", "Data")) props = obj.BIMRoofProperties + # restore previous settings since editing was canceled props.set_props_kwargs_from_ifc_data(data) - - body = ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW") - blenderbim.core.geometry.switch_representation( - tool.Ifc, - tool.Geometry, - obj=obj, - representation=body, - should_reload=True, - is_global=True, - should_sync_changes_first=False, - ) + update_roof_modifier_bmesh(context) props.is_editing = False return {"FINISHED"}