From 4672fc341ffc082b811c68b88faa6b9567cf56c7 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 2 Apr 2025 18:10:59 +0500 Subject: [PATCH] Fix representation items / booleans UI prioritizing item mode object over active obj It led to confusion when object A would be in Item Mode and you open properties for object B and try to show rep items for B and UI would be unresponsive. --- src/bonsai/bonsai/bim/module/geometry/ui.py | 2 +- src/bonsai/bonsai/bim/module/void/data.py | 13 +++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/geometry/ui.py b/src/bonsai/bonsai/bim/module/geometry/ui.py index b1fe7bea61..415b21f79b 100644 --- a/src/bonsai/bonsai/bim/module/geometry/ui.py +++ b/src/bonsai/bonsai/bim/module/geometry/ui.py @@ -225,7 +225,7 @@ class BIM_PT_representation_items(Panel): RepresentationItemsData.load() props = tool.Geometry.get_geometry_props() - obj = props.representation_obj or tool.Blender.get_active_object() + obj = tool.Geometry.get_active_or_representation_obj() assert obj props = tool.Geometry.get_object_geometry_props(obj) diff --git a/src/bonsai/bonsai/bim/module/void/data.py b/src/bonsai/bonsai/bim/module/void/data.py index 133d3e15f5..43a6f27d12 100644 --- a/src/bonsai/bonsai/bim/module/void/data.py +++ b/src/bonsai/bonsai/bim/module/void/data.py @@ -118,23 +118,24 @@ class BooleansData: @classmethod def load(cls): + # Only called when some object is active. cls.data = {} cls.data["total_booleans"] = cls.booleans() cls.data["manual_booleans"] = cls.manual_booleans() cls.is_loaded = True @classmethod - def booleans(cls): - props = tool.Geometry.get_geometry_props() - obj = props.representation_obj or bpy.context.active_object + def booleans(cls) -> list[ifcopenshell.entity_instance]: + obj = tool.Geometry.get_active_or_representation_obj() + assert obj if not (representation := tool.Geometry.get_active_representation(obj)): return [] return tool.Model.get_booleans(representation=representation) @classmethod - def manual_booleans(cls): - props = tool.Geometry.get_geometry_props() - obj = props.representation_obj or bpy.context.active_object + def manual_booleans(cls) -> list[ifcopenshell.entity_instance]: + obj = tool.Geometry.get_active_or_representation_obj() + assert obj if not (representation := tool.Geometry.get_active_representation(obj)): return [] return tool.Model.get_manual_booleans(tool.Ifc.get_entity(obj), representation=representation)