From ada4a8884b1b4ecf98eff77b454829e17692ea8a Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 18 Oct 2024 17:07:01 +0500 Subject: [PATCH] tool.PsetTemplate --- .../bim/module/pset_template/operator.py | 40 ++----------- src/bonsai/bonsai/core/tool.py | 5 ++ src/bonsai/bonsai/tool/__init__.py | 1 + src/bonsai/bonsai/tool/pset_template.py | 56 +++++++++++++++++++ 4 files changed, 68 insertions(+), 34 deletions(-) create mode 100644 src/bonsai/bonsai/tool/pset_template.py diff --git a/src/bonsai/bonsai/bim/module/pset_template/operator.py b/src/bonsai/bonsai/bim/module/pset_template/operator.py index 7bbc280c58..f5386c6f9f 100644 --- a/src/bonsai/bonsai/bim/module/pset_template/operator.py +++ b/src/bonsai/bonsai/bim/module/pset_template/operator.py @@ -25,34 +25,6 @@ import bonsai.bim.schema import bonsai.bim.handler import bonsai.tool as tool from bonsai.bim.ifc import IfcStore -from typing import final - - -class PsetTemplateOperator: - """`tool.Ifc.Operator` but for pset template file.""" - - @final - def execute(self, context): - IfcStore.begin_transaction(self) - template_file = IfcStore.pset_template_file - assert template_file - self.template_file = template_file - template_file.begin_transaction() - result = self._execute(context) - template_file.end_transaction() - IfcStore.add_transaction_operation(self) - IfcStore.end_transaction(self) - bonsai.bim.handler.refresh_ui_data() - return {"FINISHED"} - - def rollback(self, data): - self.template_file.undo() - - def commit(self, data): - self.template_file.redo() - - def _execute(self, context: bpy.types.Context) -> None: - tool.Ifc.Operator._execute(self, context) class AddPsetTemplateFile(bpy.types.Operator): @@ -81,7 +53,7 @@ class AddPsetTemplateFile(bpy.types.Operator): return {"FINISHED"} -class AddPsetTemplate(bpy.types.Operator, PsetTemplateOperator): +class AddPsetTemplate(bpy.types.Operator, tool.PsetTemplate.PsetTemplateOperator): bl_idname = "bim.add_pset_template" bl_label = "Add Pset Template" bl_options = {"REGISTER", "UNDO"} @@ -97,7 +69,7 @@ class AddPsetTemplate(bpy.types.Operator, PsetTemplateOperator): context.scene.BIMPsetTemplateProperties.pset_templates = str(template.id()) -class RemovePsetTemplate(bpy.types.Operator, PsetTemplateOperator): +class RemovePsetTemplate(bpy.types.Operator, tool.PsetTemplate.PsetTemplateOperator): bl_idname = "bim.remove_pset_template" bl_label = "Remove Pset Template" bl_options = {"REGISTER", "UNDO"} @@ -206,7 +178,7 @@ class DisableEditingPropTemplate(bpy.types.Operator): return {"FINISHED"} -class EditPsetTemplate(bpy.types.Operator, PsetTemplateOperator): +class EditPsetTemplate(bpy.types.Operator, tool.PsetTemplate.PsetTemplateOperator): bl_idname = "bim.edit_pset_template" bl_label = "Edit Pset Template" bl_options = {"REGISTER", "UNDO"} @@ -268,7 +240,7 @@ class RemovePsetTemplateFile(bpy.types.Operator): bonsai.bim.module.pset_template.prop.updatePsetTemplateFiles(self.props, context) -class AddPropTemplate(bpy.types.Operator, PsetTemplateOperator): +class AddPropTemplate(bpy.types.Operator, tool.PsetTemplate.PsetTemplateOperator): bl_idname = "bim.add_prop_template" bl_label = "Add Prop Template" bl_options = {"REGISTER", "UNDO"} @@ -287,7 +259,7 @@ class AddPropTemplate(bpy.types.Operator, PsetTemplateOperator): bonsai.bim.schema.reload(tool.Ifc.get().schema) -class RemovePropTemplate(bpy.types.Operator, PsetTemplateOperator): +class RemovePropTemplate(bpy.types.Operator, tool.PsetTemplate.PsetTemplateOperator): bl_idname = "bim.remove_prop_template" bl_label = "Remove Prop Template" bl_options = {"REGISTER", "UNDO"} @@ -304,7 +276,7 @@ class RemovePropTemplate(bpy.types.Operator, PsetTemplateOperator): bonsai.bim.schema.reload(tool.Ifc.get().schema) -class EditPropTemplate(bpy.types.Operator, PsetTemplateOperator): +class EditPropTemplate(bpy.types.Operator, tool.PsetTemplate.PsetTemplateOperator): bl_idname = "bim.edit_prop_template" bl_label = "Edit Prop Template" bl_options = {"REGISTER", "UNDO"} diff --git a/src/bonsai/bonsai/core/tool.py b/src/bonsai/bonsai/core/tool.py index eaf6d3002b..2e89d2026c 100644 --- a/src/bonsai/bonsai/core/tool.py +++ b/src/bonsai/bonsai/core/tool.py @@ -673,6 +673,11 @@ class Pset: def set_active_pset(cls, props, pset, has_template): pass +@interface +class PsetTemplate: + pass + + @interface class Qto: def get_radius_of_selected_vertices(cls, obj): pass diff --git a/src/bonsai/bonsai/tool/__init__.py b/src/bonsai/bonsai/tool/__init__.py index 16a64716e4..1503ddc741 100644 --- a/src/bonsai/bonsai/tool/__init__.py +++ b/src/bonsai/bonsai/tool/__init__.py @@ -48,6 +48,7 @@ from bonsai.tool.polyline import Polyline from bonsai.tool.project import Project from bonsai.tool.profile import Profile from bonsai.tool.pset import Pset +from bonsai.tool.pset_template import PsetTemplate from bonsai.tool.qto import Qto from bonsai.tool.raycast import Raycast from bonsai.tool.resource import Resource diff --git a/src/bonsai/bonsai/tool/pset_template.py b/src/bonsai/bonsai/tool/pset_template.py new file mode 100644 index 0000000000..0307c1ed5d --- /dev/null +++ b/src/bonsai/bonsai/tool/pset_template.py @@ -0,0 +1,56 @@ +# Bonsai - OpenBIM Blender Add-on +# Copyright (C) 2021 Dion Moult +# +# This file is part of Bonsai. +# +# Bonsai is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Bonsai is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Bonsai. If not, see . + +import bpy +import ifcopenshell +import ifcopenshell.api.pset_template +import ifcopenshell.util.attribute +import ifcopenshell.util.element +import bonsai.core.tool +import bonsai.tool as tool +from typing import Union, Literal, Any, final +from typing_extensions import assert_never +from bonsai.bim.ifc import IfcStore + + +class PsetTemplate(bonsai.core.tool.PsetTemplate): + class PsetTemplateOperator: + """`tool.Ifc.Operator` but for pset template file.""" + + @final + def execute(self, context): + IfcStore.begin_transaction(self) + template_file = IfcStore.pset_template_file + assert template_file + self.template_file = template_file + template_file.begin_transaction() + result = self._execute(context) + template_file.end_transaction() + IfcStore.add_transaction_operation(self) + IfcStore.end_transaction(self) + bonsai.bim.handler.refresh_ui_data() + return {"FINISHED"} + + def rollback(self, data): + self.template_file.undo() + + def commit(self, data): + self.template_file.redo() + + def _execute(self, context: bpy.types.Context) -> None: + tool.Ifc.Operator._execute(self, context)