Blender の初期状態
bpy.context
>>> bpy.context.object
bpy.data.objects['Cube']
>>> bpy.context.active_object
bpy.data.objects['Cube']
>>> bpy.context.selected_objects
[bpy.data.objects['Cube']]
これら(リストはその要素)は bpy.types.Objects
のインスタンスである。
bpy.context.view_layer
>>> list(bpy.context.view_layer.objects)
[bpy.data.objects['Cube'], bpy.data.objects['Light'], bpy.data.objects['Camera']]
>>> bpy.context.view_layer.objects.active
bpy.data.objects['Cube']
>>> list(bpy.context.view_layer.objects.selected)
[bpy.data.objects['Cube']]
bpy.context.view_layer
は bpy.types.ViewLayer
を継承する。bpy.types.ViewLayer.objects
は bpy.types.LayerObjects
を継承して、active
と selected
の属性を持つ。bpy.types.LayerObjects.active
と bpy.types.LayerObjects.selected
はいづれも bpy.types.Object
を継承する。
その他の object(s) 参照
bpy.context.scene
>>> list(bpy.context.scene.objects)
[bpy.data.objects['Cube'], bpy.data.objects['Light'], bpy.data.objects['Camera']]
bpy.context.scene
は bpy.types.Scene
を継承する。bpy.context.scene.objects
は bpy.types.SceneObjects
を継承するが、特別な属性は無い。
bpy.context.collection
>>> list(bpy.context.collection.objects)
[bpy.data.objects['Cube'], bpy.data.objects['Light'], bpy.data.objects['Camera']]
bpy.context.collection
は bpy.types.Collection
を継承する。bpy.types.Collection.objects
は bpy.types.CollectionObjects
を継承する。
その他
>>> list(bpy.context.scene.collection.objects)
[]
selected objects
初期状態に対して、例えば、
>>> bpy.data.objects['Light'].select_set(True)
とすると、
>>> bpy.context.selected_objects
[bpy.data.objects['Cube'], bpy.data.objects['Light']]
>>> list(bpy.context.view_layer.objects.selected)
[bpy.data.objects['Cube'], bpy.data.objects['Light']]
となる。active object や、context object は元のままである。
ちなみに、
>>> bpy.data.objects['Light'].hide_set(True)
とすると、selected が False になる。
>>> bpy.context.selected_objects
[bpy.data.objects['Cube']]
>>> list(bpy.context.view_layer.objects.selected)
[bpy.data.objects['Cube']]
active object と context object
bpy.types.Object
に active 状態を操作する属性は無い。
初期状態に対して、
>>> bpy.data.objects['Cube'].select_set(False)
としても、
>>> bpy.data.objects['Cube'].hide_set(True)
としても、active object と context object は変わらない。
>>> bpy.context.active_object
bpy.data.objects['Cube']
>>> bpy.context.view_layer.objects.active
bpy.data.objects['Cube']
>>> bpy.context.object
bpy.data.objects['Cube']
このとき、active かつ context object であるが、selected object ではなくなる。
>>> bpy.context.selected_objects
[]
>>> list(bpy.context.view_layer.objects.selected)
[]
active object を指定するには、
>>> bpy.context.view_layer.objects.active = bpy.data.objects['Light']
>>> bpy.context.view_layer.objects.active = None
などとする。active になっても、selected にはならない。
私が考える限りでは、active object と context object は同じである。