43 lines
1.5 KiB
Python
43 lines
1.5 KiB
Python
"""
|
|
Dependency graph: Iterate over all object instances
|
|
+++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
|
|
Sometimes it is needed to know all the instances with their matrices (for example, when writing an
|
|
exporter or a custom render engine).
|
|
This example shows how to access all objects and instances in the scene.
|
|
"""
|
|
import bpy
|
|
|
|
|
|
class OBJECT_OT_object_instances(bpy.types.Operator):
|
|
"""Access original object and do something with it"""
|
|
bl_label = "DEG Iterate Object Instances"
|
|
bl_idname = "object.object_instances"
|
|
|
|
def execute(self, context):
|
|
depsgraph = context.evaluated_depsgraph_get()
|
|
for object_instance in depsgraph.object_instances:
|
|
# This is an object which is being instanced.
|
|
obj = object_instance.object
|
|
# `is_instance` denotes whether the object is coming from instances (as an opposite of
|
|
# being an emitting object. )
|
|
if not object_instance.is_instance:
|
|
print(f"Object {obj.name} at {object_instance.matrix_world}")
|
|
else:
|
|
# Instanced will additionally have fields like uv, random_id and others which are
|
|
# specific for instances. See Python API for DepsgraphObjectInstance for details,
|
|
print(f"Instance of {obj.name} at {object_instance.matrix_world}")
|
|
return {'FINISHED'}
|
|
|
|
|
|
def register():
|
|
bpy.utils.register_class(OBJECT_OT_object_instances)
|
|
|
|
|
|
def unregister():
|
|
bpy.utils.unregister_class(OBJECT_OT_object_instances)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
register()
|