From 4717dffcdc341af64701a602121185fb6d47c41d Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 23 Jan 2025 16:09:16 +0500 Subject: [PATCH] Bonsai - assign/unassign structural model for all selected elements --- .../bonsai/bim/module/structural/operator.py | 14 +++++-- src/bonsai/bonsai/core/structural.py | 42 ++++++++----------- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/structural/operator.py b/src/bonsai/bonsai/bim/module/structural/operator.py index d2b0ff757e..e0fbbc7ffd 100644 --- a/src/bonsai/bonsai/bim/module/structural/operator.py +++ b/src/bonsai/bonsai/bim/module/structural/operator.py @@ -314,26 +314,32 @@ class DisableEditingStructuralAnalysisModel(bpy.types.Operator): class AssignStructuralAnalysisModel(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.assign_structural_analysis_model" bl_label = "Assign Structural Analysis Model" + bl_description = "Assign structual analysis model to the selected objects." bl_options = {"REGISTER", "UNDO"} - product: bpy.props.StringProperty() structural_analysis_model: bpy.props.IntProperty() def _execute(self, context): + ifc_file = tool.Ifc.get() + structural_analysis_model = ifc_file.by_id(self.structural_analysis_model) + products = [element for o in tool.Blender.get_selected_objects() if (element := tool.Ifc.get_entity(o))] core.assign_structural_analysis_model( - tool.Ifc, tool.Structural, product=self.product, structural_analysis_model=self.structural_analysis_model + tool.Ifc, products=products, structural_analysis_model=structural_analysis_model ) class UnassignStructuralAnalysisModel(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.unassign_structural_analysis_model" bl_label = "Unassign Structural Analysis Model" + bl_description = "Unassign structual analysis model from the selected objects." bl_options = {"REGISTER", "UNDO"} - product: bpy.props.StringProperty() structural_analysis_model: bpy.props.IntProperty() def _execute(self, context): + ifc_file = tool.Ifc.get() + structural_analysis_model = ifc_file.by_id(self.structural_analysis_model) + products = [element for o in tool.Blender.get_selected_objects() if (element := tool.Ifc.get_entity(o))] core.unassign_structural_analysis_model( - tool.Ifc, tool.Structural, product=self.product, structural_analysis_model=self.structural_analysis_model + tool.Ifc, products=products, structural_analysis_model=structural_analysis_model ) diff --git a/src/bonsai/bonsai/core/structural.py b/src/bonsai/bonsai/core/structural.py index bae45ada33..63ae292463 100644 --- a/src/bonsai/bonsai/core/structural.py +++ b/src/bonsai/bonsai/core/structural.py @@ -34,19 +34,16 @@ def add_structural_analysis_model(ifc: tool.Ifc, structural: tool.Structural) -> def assign_structural_analysis_model( ifc: tool.Ifc, - structural: tool.Structural, - product: str, - structural_analysis_model: Union[int, None], + products: list[ifcopenshell.entity_instance], + structural_analysis_model: ifcopenshell.entity_instance, ) -> None: - product_ = structural.get_product_or_active_object(product) - if structural_analysis_model and product: - ifc.run( - "structural.assign_structural_analysis_model", - **{ - "products": [ifc.get().by_id(product_.BIMObjectProperties.ifc_definition_id)], - "structural_analysis_model": ifc.get().by_id(structural_analysis_model), - }, - ) + ifc.run( + "structural.assign_structural_analysis_model", + **{ + "products": products, + "structural_analysis_model": structural_analysis_model, + }, + ) def disable_editing_structural_analysis_model(structural: tool.Structural) -> None: @@ -101,16 +98,13 @@ def remove_structural_analysis_model(ifc: tool.Ifc, structural: tool.Structural, def unassign_structural_analysis_model( ifc: tool.Ifc, - structural: tool.Structural, - product: str, - structural_analysis_model: Union[int, None], + products: list[ifcopenshell.entity_instance], + structural_analysis_model: ifcopenshell.entity_instance, ) -> None: - product_ = structural.get_product_or_active_object(product) - if structural_analysis_model and product: - ifc.run( - "structural.unassign_structural_analysis_model", - **{ - "products": [ifc.get().by_id(product_.BIMObjectProperties.ifc_definition_id)], - "structural_analysis_model": ifc.get().by_id(structural_analysis_model), - }, - ) + ifc.run( + "structural.unassign_structural_analysis_model", + **{ + "products": products, + "structural_analysis_model": structural_analysis_model, + }, + )