4

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.

Anton
  • 141
  • 2
  • 1
    could 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
  • 2
    You 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 Answers1

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