diff --git a/src/bonsai/bonsai/bim/module/model/railing.py b/src/bonsai/bonsai/bim/module/model/railing.py index 5c9246eaa0..2ec5da1419 100644 --- a/src/bonsai/bonsai/bim/module/model/railing.py +++ b/src/bonsai/bonsai/bim/module/model/railing.py @@ -353,7 +353,7 @@ class AddRailing(bpy.types.Operator, tool.Ifc.Operator): refresh() update_railing_modifier_bmesh(context) update_railing_modifier_ifc_data(context) - return {"FINISHED"} + tool.Model.add_body_representation(obj) class EnableEditingRailing(bpy.types.Operator, tool.Ifc.Operator): diff --git a/src/bonsai/bonsai/bim/module/model/roof.py b/src/bonsai/bonsai/bim/module/model/roof.py index f50ed5879c..0c64aee046 100644 --- a/src/bonsai/bonsai/bim/module/model/roof.py +++ b/src/bonsai/bonsai/bim/module/model/roof.py @@ -580,7 +580,7 @@ class AddRoof(bpy.types.Operator, tool.Ifc.Operator): refresh() update_roof_modifier_bmesh(context) update_roof_modifier_ifc_data(context) - return {"FINISHED"} + tool.Model.add_body_representation(obj) class EnableEditingRoof(bpy.types.Operator, tool.Ifc.Operator): diff --git a/src/bonsai/bonsai/bim/module/model/stair.py b/src/bonsai/bonsai/bim/module/model/stair.py index 7972daa926..a353edece2 100644 --- a/src/bonsai/bonsai/bim/module/model/stair.py +++ b/src/bonsai/bonsai/bim/module/model/stair.py @@ -65,26 +65,6 @@ def regenerate_stair_mesh(context): obj.data.update() -def update_stair_representation(obj): - body = ifcopenshell.util.representation.get_context(tool.Ifc.get(), "Model", "Body", "MODEL_VIEW") - representation = ifcopenshell.api.run( - "geometry.add_representation", - tool.Ifc.get(), - context=body, - blender_object=obj, - geometry=obj.data, - coordinate_offset=tool.Geometry.get_cartesian_point_offset(obj), - total_items=tool.Geometry.get_total_representation_items(obj), - should_force_faceted_brep=tool.Geometry.should_force_faceted_brep(), - should_force_triangulation=tool.Geometry.should_force_triangulation(), - should_generate_uvs=tool.Geometry.should_generate_uvs(obj), - ifc_representation_class=None, - profile_set_usage=None, - ) - tool.Model.replace_object_ifc_representation(body, obj, representation) - tool.Ifc.finish_edit(obj) - - def update_ifc_stair_props(obj): """should be called after new geometry settled since it's going to update ifc representation @@ -220,7 +200,7 @@ class AddStair(bpy.types.Operator, tool.Ifc.Operator): ) regenerate_stair_mesh(context) update_ifc_stair_props(obj) - update_stair_representation(obj) + tool.Model.add_body_representation(obj) class CancelEditingStair(bpy.types.Operator, tool.Ifc.Operator): @@ -255,7 +235,7 @@ class FinishEditingStair(bpy.types.Operator, tool.Ifc.Operator): data = props.get_props_kwargs(convert_to_project_units=True) props.is_editing = False regenerate_stair_mesh(context) - update_stair_representation(obj) + tool.Model.add_body_representation(obj) pset = tool.Pset.get_element_pset(element, "BBIM_Stair") data = tool.Ifc.get().createIfcText(json.dumps(data)) diff --git a/src/bonsai/bonsai/tool/model.py b/src/bonsai/bonsai/tool/model.py index a7875bdbea..f1042b93c5 100644 --- a/src/bonsai/bonsai/tool/model.py +++ b/src/bonsai/bonsai/tool/model.py @@ -1405,3 +1405,24 @@ class Model(bonsai.core.tool.Model): mesh.materials.pop(index=i1) else: mesh.materials[i1] = mbstyle2 + + @classmethod + def add_body_representation(cls, obj: bpy.types.Object) -> None: + ifc_file = tool.Ifc.get() + body = ifcopenshell.util.representation.get_context(ifc_file, "Model", "Body", "MODEL_VIEW") + representation = ifcopenshell.api.run( + "geometry.add_representation", + ifc_file, + context=body, + blender_object=obj, + geometry=obj.data, + coordinate_offset=tool.Geometry.get_cartesian_point_offset(obj), + total_items=tool.Geometry.get_total_representation_items(obj), + should_force_faceted_brep=tool.Geometry.should_force_faceted_brep(), + should_force_triangulation=tool.Geometry.should_force_triangulation(), + should_generate_uvs=tool.Geometry.should_generate_uvs(obj), + ifc_representation_class=None, + profile_set_usage=None, + ) + tool.Model.replace_object_ifc_representation(body, obj, representation) + tool.Ifc.finish_edit(obj)