From 90e6838ddb08442572d5890756f0e416d455f742 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 4 Sep 2025 10:38:20 +0500 Subject: [PATCH] typing --- src/bonsai/bonsai/bim/ui.py | 4 ++-- src/bonsai/bonsai/tool/blender.py | 2 +- src/bonsai/bonsai/tool/ifc.py | 4 ++-- src/bonsai/bonsai/tool/snap.py | 20 +++++++++++++++++--- 4 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/bonsai/bonsai/bim/ui.py b/src/bonsai/bonsai/bim/ui.py index ae7da8ad8d..664eb1f6c1 100644 --- a/src/bonsai/bonsai/bim/ui.py +++ b/src/bonsai/bonsai/bim/ui.py @@ -1552,7 +1552,7 @@ class BIM_PT_snappping(Panel): return context.mode == "OBJECT" def draw(self, context): - prop = context.scene.BIMSnapProperties + prop = tool.Snap.get_snap_props() layout = self.layout col = layout.column(align=True) col.prop(prop, "vertex", toggle=True, icon="SNAP_VERTEX") @@ -1560,7 +1560,7 @@ class BIM_PT_snappping(Panel): col.prop(prop, "edge_center", toggle=True, icon="SNAP_MIDPOINT") col.prop(prop, "edge_intersection", toggle=True, icon="SNAP_GRID") col.prop(prop, "face", toggle=True, icon="SNAP_FACE") - groups = context.scene.BIMSnapGroups + groups = tool.Snap.get_snap_groups() row = layout.row(align=True) row.label(text="Bonsai Target Selection") row = layout.row(align=True) diff --git a/src/bonsai/bonsai/tool/blender.py b/src/bonsai/bonsai/tool/blender.py index f71e0802a4..44ceaad680 100644 --- a/src/bonsai/bonsai/tool/blender.py +++ b/src/bonsai/bonsai/tool/blender.py @@ -56,7 +56,7 @@ from collections.abc import Iterable, Callable, Generator, Sequence, Sized if TYPE_CHECKING: from sun_position.properties import SunPosProperties import bpy.stub_internal.rna_enums as rna_enums - from bonsai.bim.prop import BIMProperties, BIMObjectProperties + from bonsai.bim.prop import BIMProperties, BIMObjectProperties, BIMSnapProperties from bonsai.bim.module.attribute.prop import BIMAttributeProperties from bonsai.bim.module.constraint.prop import BIMConstraintProperties, BIMObjectConstraintProperties from bonsai.bim.module.covetool.prop import CoveToolProperties diff --git a/src/bonsai/bonsai/tool/ifc.py b/src/bonsai/bonsai/tool/ifc.py index 70095d8d19..39039d73f6 100644 --- a/src/bonsai/bonsai/tool/ifc.py +++ b/src/bonsai/bonsai/tool/ifc.py @@ -86,8 +86,8 @@ class Ifc(bonsai.core.tool.Ifc): @classmethod def get_schema(cls) -> ifcopenshell.util.schema.IFC_SCHEMA: - if IfcStore.get_file(): - return IfcStore.get_file().schema + if ifc_file := IfcStore.get_file(): + return ifc_file.schema @classmethod def clear_history(cls) -> None: diff --git a/src/bonsai/bonsai/tool/snap.py b/src/bonsai/bonsai/tool/snap.py index ec03946786..001dd10a27 100644 --- a/src/bonsai/bonsai/tool/snap.py +++ b/src/bonsai/bonsai/tool/snap.py @@ -16,6 +16,7 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from __future__ import annotations import bpy import ifcopenshell import ifcopenshell.util.unit @@ -26,13 +27,26 @@ import math import mathutils from mathutils import Matrix, Vector from lark import Lark, Transformer -from typing import Union, Any +from typing import Union, Any, TYPE_CHECKING + +if TYPE_CHECKING: + from bonsai.bim.prop import BIMSnapGroups, BIMSnapProperties class Snap(bonsai.core.tool.Snap): tool_state = None snap_plane_method = None + @classmethod + def get_snap_props(cls) -> BIMSnapProperties: + assert (scene := bpy.context.scene) + return scene.BIMSnapProperties # pyright: ignore[reportAttributeAccessIssue] + + @classmethod + def get_snap_groups(cls) -> BIMSnapGroups: + assert (scene := bpy.context.scene) + return scene.BIMSnapGroups # pyright: ignore[reportAttributeAccessIssue] + @classmethod def set_snap_plane_method(cls, value=True): cls.snap_plane_method = value @@ -484,7 +498,7 @@ class Snap(bonsai.core.tool.Snap): def select_snapping_points(cls, context, event, tool_state, detected_snaps): def filter_snapping_points_by_type(snapping_points): options = ["Plane", "Axis"] - props = context.scene.BIMSnapProperties + props = tool.Snap.get_snap_props() for prop in props.__annotations__.keys(): if getattr(props, prop): options.append(props.rna_type.properties[prop].name) @@ -494,7 +508,7 @@ class Snap(bonsai.core.tool.Snap): def filter_snapping_points_by_group(detected_snaps): options = ["Wireframe", "Axis", "Plane"] - props = context.scene.BIMSnapGroups + props = tool.Snap.get_snap_groups() for prop in props.__annotations__.keys(): if getattr(props, prop): options.append(props.rna_type.properties[prop].name)