From 4d7f078f8bc3cd858d2a65a02e6e5eca237bb584 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sun, 19 Jan 2025 16:56:31 +1100 Subject: [PATCH] Ensure item decorator is updated when editing things in item mode. --- src/bonsai/bonsai/bim/module/geometry/decorator.py | 3 ++- src/bonsai/bonsai/bim/module/geometry/operator.py | 6 ++---- src/bonsai/bonsai/bim/module/geometry/prop.py | 2 -- src/bonsai/bonsai/bim/module/model/opening.py | 2 ++ 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/geometry/decorator.py b/src/bonsai/bonsai/bim/module/geometry/decorator.py index 5d2efe5e83..9d007cea0e 100644 --- a/src/bonsai/bonsai/bim/module/geometry/decorator.py +++ b/src/bonsai/bonsai/bim/module/geometry/decorator.py @@ -42,7 +42,8 @@ class ItemDecorator: if obj := item_obj.obj: objs[obj.name] = cls.get_obj_data(obj) obj_is_selected[obj.name] = obj.select_get() - obj_is_boolean[obj.name] = item_obj.is_boolean + item = tool.Ifc.get().by_id(obj.data.BIMMeshProperties.ifc_definition_id) + obj_is_boolean[obj.name] = [i for i in tool.Ifc.get().get_inverse(item) if i.is_a("IfcBooleanResult")] handler = cls() handler.objs = objs diff --git a/src/bonsai/bonsai/bim/module/geometry/operator.py b/src/bonsai/bonsai/bim/module/geometry/operator.py index ba88b71d1d..5089c3969f 100644 --- a/src/bonsai/bonsai/bim/module/geometry/operator.py +++ b/src/bonsai/bonsai/bim/module/geometry/operator.py @@ -2736,8 +2736,6 @@ class ImportRepresentationItems(bpy.types.Operator, tool.Ifc.Operator): new = props.item_objs.add() new.obj = item_obj - new.is_boolean = item_id in boolean_ids - new.ifc_definition_id = item_id tool.Geometry.import_item(item_obj) tool.Geometry.import_item_attributes(item_obj) @@ -2805,8 +2803,6 @@ class AddMeshlikeItem(bpy.types.Operator, tool.Ifc.Operator): obj.show_in_front = True new = props.item_objs.add() new.obj = obj - tool.Root.reload_item_decorator() - tool.Geometry.lock_object(obj) builder = ifcopenshell.util.shape_builder.ShapeBuilder(tool.Ifc.get()) @@ -2830,6 +2826,7 @@ class AddMeshlikeItem(bpy.types.Operator, tool.Ifc.Operator): tool.Geometry.reload_representation(bpy.context.scene.BIMGeometryProperties.representation_obj) obj.name = obj.data.name = f"Item/{item.is_a()}/{item.id()}" obj.data.BIMMeshProperties.ifc_definition_id = item.id() + tool.Root.reload_item_decorator() class AddSweptAreaSolidItem(bpy.types.Operator, tool.Ifc.Operator): @@ -2881,6 +2878,7 @@ class AddSweptAreaSolidItem(bpy.types.Operator, tool.Ifc.Operator): obj.data.BIMMeshProperties.ifc_definition_id = item.id() tool.Geometry.import_item(obj) tool.Geometry.import_item_attributes(obj) + tool.Root.reload_item_decorator() class AddCurvelikeItem(bpy.types.Operator, tool.Ifc.Operator): diff --git a/src/bonsai/bonsai/bim/module/geometry/prop.py b/src/bonsai/bonsai/bim/module/geometry/prop.py index bc45a7f4e0..e151bf63d0 100644 --- a/src/bonsai/bonsai/bim/module/geometry/prop.py +++ b/src/bonsai/bonsai/bim/module/geometry/prop.py @@ -129,9 +129,7 @@ class RepresentationItem(PropertyGroup): class RepresentationItemObject(PropertyGroup): name: StringProperty(name="Name") - ifc_definition_id: IntProperty(name="IFC Definition ID") obj: PointerProperty(type=bpy.types.Object) - is_boolean: BoolProperty(name="Is Boolean", default=False) class ShapeAspect(PropertyGroup): diff --git a/src/bonsai/bonsai/bim/module/model/opening.py b/src/bonsai/bonsai/bim/module/model/opening.py index 4566a43a71..23864df0ed 100644 --- a/src/bonsai/bonsai/bim/module/model/opening.py +++ b/src/bonsai/bonsai/bim/module/model/opening.py @@ -555,6 +555,7 @@ class AddBoolean(Operator, tool.Ifc.Operator): tool.Geometry.reload_representation(rep_obj) if props.is_editing: bpy.ops.bim.enable_editing_booleans() + tool.Root.reload_item_decorator() class ShowBooleans(Operator, tool.Ifc.Operator, AddObjectHelper): @@ -1163,6 +1164,7 @@ class RemoveBoolean(Operator, tool.Ifc.Operator): bpy.ops.bim.enable_editing_booleans() rep_obj = bpy.context.scene.BIMGeometryProperties.representation_obj tool.Geometry.reload_representation(rep_obj) + tool.Root.reload_item_decorator() class SelectBoolean(Operator):