From 0f9717b3462af35d9ba650d639ee163e0022cd40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bruno=20Perdig=C3=A3o?= Date: Sat, 22 Aug 2026 15:57:55 -0300 Subject: [PATCH] snap: clear raycast global variables cache --- src/bonsai/bonsai/bim/module/model/polyline.py | 12 ++++++++---- src/bonsai/bonsai/bim/module/project/operator.py | 5 +---- src/bonsai/bonsai/tool/raycast.py | 11 +++++++++++ 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/model/polyline.py b/src/bonsai/bonsai/bim/module/model/polyline.py index be43b377ef..0069961bc0 100644 --- a/src/bonsai/bonsai/bim/module/model/polyline.py +++ b/src/bonsai/bonsai/bim/module/model/polyline.py @@ -380,10 +380,7 @@ class PolylineOperator: if event.value == "RELEASE" and event.type in {"ESC"}: self.tool_state.axis_method = None self.tool_state.plane_method = None - context.workspace.status_text_set(text=None) - PolylineDecorator.uninstall() - tool.Polyline.clear_polyline() - tool.Blender.update_viewport() + self.cleanup(context) return {"CANCELLED"} def handle_mouse_move( @@ -424,6 +421,13 @@ class PolylineOperator: tool.Blender.update_viewport() return {"RUNNING_MODAL"} + def cleanup(self, context: bpy.Types.Context): + context.workspace.status_text_set(text=None) + PolylineDecorator.uninstall() + tool.Polyline.clear_polyline() + tool.Raycast.clear_cache() + tool.Blender.update_viewport() + def set_offset(self, context: bpy.types.Context, relating_type: ifcopenshell.entity_instance) -> None: props = tool.Model.get_model_props() direction_sense = props.direction_sense diff --git a/src/bonsai/bonsai/bim/module/project/operator.py b/src/bonsai/bonsai/bim/module/project/operator.py index 0a342b9331..e34ad158b7 100644 --- a/src/bonsai/bonsai/bim/module/project/operator.py +++ b/src/bonsai/bonsai/bim/module/project/operator.py @@ -3265,13 +3265,10 @@ class MeasureTool(bpy.types.Operator, PolylineOperator): and event.value == "RELEASE" and event.type in {"RET", "NUMPAD_ENTER", "RIGHTMOUSE"} ) or single_mode: - context.workspace.status_text_set(text=None) self.tool_state.plane_method = None - PolylineDecorator.uninstall() tool.Polyline.move_polyline_to_measure(context, self.input_ui) - tool.Polyline.clear_polyline() MeasureDecorator.install(context) - tool.Blender.update_viewport() + self.cleanup(context) return {"FINISHED"} self.handle_keyboard_input(context, event) diff --git a/src/bonsai/bonsai/tool/raycast.py b/src/bonsai/bonsai/tool/raycast.py index 0df91080cf..705ad7e04b 100644 --- a/src/bonsai/bonsai/tool/raycast.py +++ b/src/bonsai/bonsai/tool/raycast.py @@ -1070,6 +1070,17 @@ class Raycast(bonsai.core.tool.Raycast): def get_gpu_wireframe_snaps(cls, context, event, objs_to_raycast): return cls.get_gpu_detection_snaps(context, event, objs_to_raycast) + @classmethod + def clear_cache(cls): + global _wireframe_batch_cache, _wireframe_vert_fmt, _triangle_batch_cache, _triangle_vert_fmt, _encoding_shader, _offscreen, _obj_list + _wireframe_batch_cache = {} + _wireframe_vert_fmt= None + _triangle_batch_cache= {} + _triangle_vert_fmt= None + _encoding_shader= None + _offscreen= None + _obj_list= [] + @classmethod def ray_cast_by_proximity( cls,