From fa29c42887f39d814f201fdfd44f079570ea68e7 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 23 Oct 2024 14:30:01 +0500 Subject: [PATCH] common method for setting up Blender listeners for objects --- src/bonsai/bonsai/bim/ifc.py | 13 ++----------- src/bonsai/bonsai/tool/ifc.py | 15 ++++++++++----- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/src/bonsai/bonsai/bim/ifc.py b/src/bonsai/bonsai/bim/ifc.py index 097b5c7233..e1bf3b85d5 100644 --- a/src/bonsai/bonsai/bim/ifc.py +++ b/src/bonsai/bonsai/bim/ifc.py @@ -274,12 +274,7 @@ class IfcStore: else: obj.BIMObjectProperties.ifc_definition_id = element.id() - bonsai.bim.handler.subscribe_to(obj, "name", bonsai.bim.handler.name_callback) - - if isinstance(obj, bpy.types.Object): - bonsai.bim.handler.subscribe_to( - obj, "active_material_index", bonsai.bim.handler.active_material_index_callback - ) + tool.Ifc.setup_listeners(obj) if IfcStore.history: data = OperationData(id=element.id(), guid=getattr(element, "GlobalId", None), obj=obj.name) @@ -301,11 +296,7 @@ class IfcStore: IfcStore.id_map[data["id"]] = obj if "guid" in data: IfcStore.guid_map[data["guid"]] = obj - bonsai.bim.handler.subscribe_to(obj, "name", bonsai.bim.handler.name_callback) - if isinstance(obj, bpy.types.Object): - bonsai.bim.handler.subscribe_to( - obj, "active_material_index", bonsai.bim.handler.active_material_index_callback - ) + tool.Ifc.setup_listeners(obj) # TODO Listeners are not re-registered. Does this cause nasty problems to debug later on? # TODO We're handling id_map and guid_map, but what about edited_objs? This might cause big problems. diff --git a/src/bonsai/bonsai/tool/ifc.py b/src/bonsai/bonsai/tool/ifc.py index d08090a747..ad7bc14ba8 100644 --- a/src/bonsai/bonsai/tool/ifc.py +++ b/src/bonsai/bonsai/tool/ifc.py @@ -161,10 +161,7 @@ class Ifc(bonsai.core.tool.Ifc): if global_id: IfcStore.guid_map[global_id] = obj - bonsai.bim.handler.subscribe_to(obj, "name", bonsai.bim.handler.name_callback) - bonsai.bim.handler.subscribe_to( - obj, "active_material_index", bonsai.bim.handler.active_material_index_callback - ) + cls.setup_listeners(obj) for obj in bpy.data.materials: if obj.library: @@ -177,7 +174,15 @@ class Ifc(bonsai.core.tool.Ifc): continue IfcStore.id_map[style.id()] = obj - bonsai.bim.handler.subscribe_to(obj, "name", bonsai.bim.handler.name_callback) + cls.setup_listeners(obj) + + @classmethod + def setup_listeners(cls, obj: IFC_CONNECTED_TYPE) -> None: + if isinstance(obj, bpy.types.Object): + bonsai.bim.handler.subscribe_to( + obj, "active_material_index", bonsai.bim.handler.active_material_index_callback + ) + bonsai.bim.handler.subscribe_to(obj, "name", bonsai.bim.handler.name_callback) @classmethod def link(