diff options
Diffstat (limited to 'doc/python_api/examples/bpy.types.Depsgraph.2.py')
-rw-r--r-- | doc/python_api/examples/bpy.types.Depsgraph.2.py | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/doc/python_api/examples/bpy.types.Depsgraph.2.py b/doc/python_api/examples/bpy.types.Depsgraph.2.py new file mode 100644 index 00000000000..8639ffc0267 --- /dev/null +++ b/doc/python_api/examples/bpy.types.Depsgraph.2.py @@ -0,0 +1,45 @@ +""" +Dependency graph: Original object example ++++++++++++++++++++++++++++++++++++++++++ + +This example demonstrates access to the original ID. +Such access is needed to check whether object is selected, or to compare pointers. +""" +import bpy + + +class OBJECT_OT_original_example(bpy.types.Operator): + """Access original object and do something with it""" + bl_label = "DEG Access Original Object" + bl_idname = "object.original_example" + + def check_object_selected(self, object_eval): + # Selection depends on a context and is only valid for original objects. This means we need + # to request the original object from the known evaluated one. + # + # NOTE: All ID types have an `original` field. + object = object_eval.original + return object.select_get() + + def execute(self, context): + # NOTE: It seems redundant to iterate over original objects to request evaluated ones + # just to get original back. But we want to keep example as short as possible, but in real + # world there are cases when evaluated object is coming from a more meaningful source. + depsgraph = context.evaluated_depsgraph_get() + for object in context.editable_objects: + object_eval = object.evaluated_get(depsgraph) + if self.check_object_selected(object_eval): + self.report({'INFO'}, f"Object is selected: {object_eval.name}") + return {'FINISHED'} + + +def register(): + bpy.utils.register_class(OBJECT_OT_original_example) + + +def unregister(): + bpy.utils.unregister_class(OBJECT_OT_original_example) + + +if __name__ == "__main__": + register() |