Is there any way to call a function on object delete or on changing count of bpy.data.objects?
There is nothing suitable in bpy.app.handlers and I coudn't find something anywhere else.
Asked
Active
Viewed 892 times
4
Anton
- 141
- 2
-
1could set up a scene_update handler to do this with a global dic or similar and check with something like this http://blender.stackexchange.com/questions/34860/how-to-check-if-an-object-is-deleted?rq=1 – batFINGER Oct 28 '16 at 09:56
-
Thanks. I Tried to avoid scene_update handler because it calls too often but it's ok if this is an only option... – Anton Oct 28 '16 at 10:02
-
Could use a modal timer operator, or even a draw method to flag change. The scene_update handler is AFAIK the "catch all" way to check on delete. – batFINGER Oct 28 '16 at 10:26
-
2You can override the delete function. https://blender.stackexchange.com/questions/28932/prevent-accidental-deletion-of-object/28933 – Piotr Kowalczyk Mar 22 '19 at 14:54
1 Answers
3
Piotr commented that you could override the Delete operator, as described for a different purpose in this answer: https://blender.stackexchange.com/a/28933/66651
I am using it to remove derivative objects. It works very well!
class delete_override(bpy.types.Operator):
"""delete objects and their derivatives"""
bl_idname = "object.delete"
bl_label = "Object Delete Operator"
@classmethod
def poll(cls, context):
return context.active_object is not None
def execute(self, context):
for obj in context.selected_objects:
# replace with your function:
my_function(obj)
bpy.data.objects.remove(obj)
return {'FINISHED'}
def register():
bpy.utils.register_class(delete_override)
def unregister():
bpy.utils.unregister_class(delete_override)
bogl
- 181
- 5
-
1
-
1@Ray, good point! The later one would win. Good enough for experiments, not good enough for release quality. – bogl Nov 26 '23 at 11:37