From 8c5d33f9e544451b3b75dec2c25e7018ce773c2d Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Tue, 4 Aug 2026 12:56:44 -0500 Subject: [PATCH] Evict stale snap_objs cache entries on ReferenceError When a Blender object is deleted while the snap cache still holds a SnapObj referencing it, accessing snap_obj.obj.name raises ReferenceError. Catch it, evict the dead entry, and let the caller retry cleanly. Co-Authored-By: Claude Sonnet 4.6 --- src/bonsai/bonsai/tool/raycast.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/bonsai/bonsai/tool/raycast.py b/src/bonsai/bonsai/tool/raycast.py index f04b2288c5..0a9d6e7dda 100644 --- a/src/bonsai/bonsai/tool/raycast.py +++ b/src/bonsai/bonsai/tool/raycast.py @@ -970,7 +970,12 @@ class Raycast(bonsai.core.tool.Raycast): if obj.data is None or not isinstance(obj.data, bpy.types.Mesh): return None for i, snap_obj in enumerate(cls.snap_objs): - if obj.name == snap_obj.obj.name: + try: + cached_name = snap_obj.obj.name + except ReferenceError: + cls.snap_objs.pop(i) + break + if obj.name == cached_name: # Fast O(1) invalidation: vertex count change (mesh edit) or # world matrix change (object moved/rotated). if len(obj.data.vertices) != len(snap_obj.verts_3d):