diff --git a/src/bonsai/bonsai/tool/raycast.py b/src/bonsai/bonsai/tool/raycast.py index 68402260cd..56f73083e7 100644 --- a/src/bonsai/bonsai/tool/raycast.py +++ b/src/bonsai/bonsai/tool/raycast.py @@ -969,6 +969,17 @@ class Raycast(bonsai.core.tool.Raycast): def create_snap_obj(cls, obj): if obj.data is None or not isinstance(obj.data, bpy.types.Mesh): return None + # Drop cache entries whose Blender object has been deleted. Accessing any + # attribute on a removed object raises ReferenceError ("StructRNA ... has + # been removed"), so test validity before comparing names below. + valid_snap_objs = [] + for snap_obj in cls.snap_objs: + try: + snap_obj.obj.name + except ReferenceError: + continue + valid_snap_objs.append(snap_obj) + cls.snap_objs[:] = valid_snap_objs for i, snap_obj in enumerate(cls.snap_objs): if obj.name == snap_obj.obj.name: # Handle objects modified while a modal operator is active.