From 23c30e7642e1d39338e079a1ad3cab1410944171 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bruno=20Perdig=C3=A3o?= Date: Fri, 8 Nov 2024 16:25:21 -0300 Subject: [PATCH] Implement #3083 --- .../bonsai/bim/module/model/__init__.py | 1 + src/bonsai/bonsai/bim/module/model/slab.py | 22 +++++++++++++++++++ .../bonsai/bim/module/model/workspace.py | 2 ++ 3 files changed, 25 insertions(+) diff --git a/src/bonsai/bonsai/bim/module/model/__init__.py b/src/bonsai/bonsai/bim/module/model/__init__.py index 3766a14e4b..deec325c9e 100644 --- a/src/bonsai/bonsai/bim/module/model/__init__.py +++ b/src/bonsai/bonsai/bim/module/model/__init__.py @@ -105,6 +105,7 @@ classes = ( slab.EditSketchExtrusionProfile, slab.EnableEditingExtrusionProfile, slab.EnableEditingSketchExtrusionProfile, + slab.RecalculateSlab, slab.ResetVertex, slab.SetArcIndex, space.GenerateSpace, diff --git a/src/bonsai/bonsai/bim/module/model/slab.py b/src/bonsai/bonsai/bim/module/model/slab.py index 90fda177c9..9edce5fd8f 100644 --- a/src/bonsai/bonsai/bim/module/model/slab.py +++ b/src/bonsai/bonsai/bim/module/model/slab.py @@ -34,6 +34,7 @@ from mathutils import Vector, Matrix from bonsai.bim.module.geometry.helper import Helper from bonsai.bim.module.model.decorator import ProfileDecorator, PolylineDecorator, ProductDecorator from bonsai.bim.module.model.polyline import PolylineOperator +from bonsai.bim.module.model.wall import DumbWallRecalculator from typing import Optional @@ -821,3 +822,24 @@ class DrawPolylineSlab(bpy.types.Operator, PolylineOperator): self.tool_state.use_default_container = True self.tool_state.plane_method = "XY" return {"RUNNING_MODAL"} + +class RecalculateSlab(bpy.types.Operator, tool.Ifc.Operator): + bl_idname = "bim.recalculate_slab" + bl_label = "Recalculate Slab" + bl_options = {"REGISTER", "UNDO"} + + @classmethod + def poll(cls, context): + return context.selected_objects + + def _execute(self, context): + walls = [] + for obj in context.selected_objects: + element = tool.Ifc.get_entity(obj) + if element.is_a("IfcSlab"): + for rel in element.ConnectedTo: + if rel.is_a() == "IfcRelConnectsElements" and rel.RelatedElement.is_a("IfcWall"): + walls.append(tool.Ifc.get_object(rel.RelatedElement)) + + DumbWallRecalculator().recalculate(walls) + return {"FINISHED"} diff --git a/src/bonsai/bonsai/bim/module/model/workspace.py b/src/bonsai/bonsai/bim/module/model/workspace.py index 983d0d6bab..ab0fe829ff 100644 --- a/src/bonsai/bonsai/bim/module/model/workspace.py +++ b/src/bonsai/bonsai/bim/module/model/workspace.py @@ -1086,6 +1086,8 @@ class Hotkey(bpy.types.Operator, tool.Ifc.Operator): return if self.active_material_usage == "LAYER2": bpy.ops.bim.recalculate_wall() + elif self.active_material_usage == "LAYER3": + bpy.ops.bim.recalculate_slab() elif tool.System.get_ports(element): bpy.ops.bim.regenerate_distribution_element() elif self.active_material_usage == "PROFILE":