From be1836fa488f12c5bc189975a3d26b153c07a104 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 12 May 2025 18:12:25 +0500 Subject: [PATCH] Mark thumbnails as outdated instead of updating them right away As user may never open them in type manager --- src/bonsai/bonsai/bim/module/model/door.py | 2 +- src/bonsai/bonsai/bim/module/model/product.py | 3 +-- src/bonsai/bonsai/bim/module/model/profile.py | 2 +- src/bonsai/bonsai/bim/module/model/window.py | 2 +- src/bonsai/bonsai/tool/model.py | 11 +++++++++++ 5 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/model/door.py b/src/bonsai/bonsai/bim/module/model/door.py index 29d4cf815e..32800f5835 100644 --- a/src/bonsai/bonsai/bim/module/model/door.py +++ b/src/bonsai/bonsai/bim/module/model/door.py @@ -618,7 +618,7 @@ class FinishEditingDoor(bpy.types.Operator, tool.Ifc.Operator): update_door_modifier_representation(obj) element_type = ifcopenshell.util.element.get_type(element) if element_type: - tool.Model.update_thumbnail_for_element(element_type, refresh=True) + tool.Model.mark_thumbnail_for_update(element_type) pset = tool.Pset.get_element_pset(element, "BBIM_Door") door_data = tool.Ifc.get().createIfcText(json.dumps(door_data, default=list)) diff --git a/src/bonsai/bonsai/bim/module/model/product.py b/src/bonsai/bonsai/bim/module/model/product.py index fb329ab452..10aa79576a 100644 --- a/src/bonsai/bonsai/bim/module/model/product.py +++ b/src/bonsai/bonsai/bim/module/model/product.py @@ -608,8 +608,7 @@ class LoadTypeThumbnails(bpy.types.Operator): while queue: # if bpy.app.is_job_running("RENDER_PREVIEW") does not seem to reflect asset preview generation element = queue.pop() - if tool.Model.update_thumbnail_for_element(element): - queue.append(element) + tool.Model.mark_thumbnail_for_update(element) return {"FINISHED"} diff --git a/src/bonsai/bonsai/bim/module/model/profile.py b/src/bonsai/bonsai/bim/module/model/profile.py index c0fa809515..a409c91fab 100644 --- a/src/bonsai/bonsai/bim/module/model/profile.py +++ b/src/bonsai/bonsai/bim/module/model/profile.py @@ -212,7 +212,7 @@ class DumbProfileRegenerator: # update related thumbnails for element in self.get_element_types_using_profile(profile): - tool.Model.update_thumbnail_for_element(element, refresh=True) + tool.Model.mark_thumbnail_for_update(element) def regenerate_from_profile(self, usecase_path, ifc_file, settings): self.file = ifc_file diff --git a/src/bonsai/bonsai/bim/module/model/window.py b/src/bonsai/bonsai/bim/module/model/window.py index 5ace324e9e..4cd3bac0c9 100644 --- a/src/bonsai/bonsai/bim/module/model/window.py +++ b/src/bonsai/bonsai/bim/module/model/window.py @@ -531,7 +531,7 @@ class FinishEditingWindow(bpy.types.Operator, tool.Ifc.Operator): update_window_modifier_representation(context) element_type = ifcopenshell.util.element.get_type(element) if element_type: - tool.Model.update_thumbnail_for_element(element_type, refresh=True) + tool.Model.mark_thumbnail_for_update(element_type) pset = tool.Pset.get_element_pset(element, "BBIM_Window") window_data = tool.Ifc.get().createIfcText(json.dumps(window_data, default=list)) diff --git a/src/bonsai/bonsai/tool/model.py b/src/bonsai/bonsai/tool/model.py index 974f0fc10e..fdf68461e0 100644 --- a/src/bonsai/bonsai/tool/model.py +++ b/src/bonsai/bonsai/tool/model.py @@ -1145,6 +1145,17 @@ class Model(bonsai.core.tool.Model): AuthoringData.type_thumbnails[element.id()] = obj.preview.icon_id + @classmethod + def mark_thumbnail_for_update(cls, element: ifcopenshell.entity_instance) -> None: + """Mark the thumbnail for the provided element as outdated. + + Allows postponing the thumbnail update until it is actually needed by the user. + """ + element_id = element.id() + if element_id not in AuthoringData.type_thumbnails: + return + del AuthoringData.type_thumbnails[element_id] + @classmethod def get_selected_ifc_objects(cls) -> list[bpy.types.Object]: return [obj for obj in tool.Blender.get_selected_objects() if tool.Ifc.get_entity(obj)]