Blender の初期状態における、 context, active, selected な object(s)

# Blender の初期状態
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2855262/55f4745d-35a0-fc1a-3db2-8fb90a266ec9.png)
#### bpy.context
```py
>>> bpy.context.object
bpy.data.objects['Cube']
```
```py
>>> bpy.context.active_object
bpy.data.objects['Cube']
```
```py
>>> bpy.context.selected_objects
[bpy.data.objects['Cube']]
```
これら（リストはその要素）は [`bpy.types.Objects`](https://docs.blender.org/api/current/bpy.types.Object.html) のインスタンスである。

#### bpy.context.view_layer
```py
>>> list(bpy.context.view_layer.objects)
[bpy.data.objects['Cube'], bpy.data.objects['Light'], bpy.data.objects['Camera']]
```
```py
>>> bpy.context.view_layer.objects.active
bpy.data.objects['Cube']
```
```py
>>> list(bpy.context.view_layer.objects.selected)
[bpy.data.objects['Cube']]
```
[`bpy.context.view_layer`](https://docs.blender.org/api/current/bpy.context.html#bpy.context.view_layer) は [`bpy.types.ViewLayer`](https://docs.blender.org/api/current/bpy.types.ViewLayer.html) を継承する。[`bpy.types.ViewLayer.objects`](https://docs.blender.org/api/current/bpy.types.ViewLayer.html#bpy.types.ViewLayer.objects) は [`bpy.types.LayerObjects`](https://docs.blender.org/api/current/bpy.types.LayerObjects.html) を継承して、`active` と `selected` の属性を持つ。[`bpy.types.LayerObjects.active`](https://docs.blender.org/api/current/bpy.types.LayerObjects.html#bpy.types.LayerObjects.active) と [`bpy.types.LayerObjects.selected`](https://docs.blender.org/api/current/bpy.types.LayerObjects.html#bpy.types.LayerObjects.selected) はいづれも [`bpy.types.Object`](https://docs.blender.org/api/current/bpy.types.Object.html) を継承する。

#### その他の object(s) 参照
##### bpy.context.scene
```py
>>> list(bpy.context.scene.objects)
[bpy.data.objects['Cube'], bpy.data.objects['Light'], bpy.data.objects['Camera']]
```
[`bpy.context.scene`](https://docs.blender.org/api/current/bpy.context.html#bpy.context.scene) は [`bpy.types.Scene`](https://docs.blender.org/api/current/bpy.types.Scene.html) を継承する。[`bpy.context.scene.objects`](https://docs.blender.org/api/current/bpy.types.Scene.html#bpy.types.Scene.objects) は [`bpy.types.SceneObjects`](https://docs.blender.org/api/current/bpy.types.SceneObjects.html) を継承するが、特別な属性は無い。

##### bpy.context.collection
```py
>>> list(bpy.context.collection.objects)
[bpy.data.objects['Cube'], bpy.data.objects['Light'], bpy.data.objects['Camera']]
```
[`bpy.context.collection`](https://docs.blender.org/api/current/bpy.context.html#bpy.context.collection) は [`bpy.types.Collection`](https://docs.blender.org/api/current/bpy.types.Collection.html) を継承する。[`bpy.types.Collection.objects`](https://docs.blender.org/api/current/bpy.types.Collection.html#bpy.types.Collection.objects) は [`bpy.types.CollectionObjects`](https://docs.blender.org/api/current/bpy.types.CollectionObjects.html) を継承する。

##### その他
```py
>>> list(bpy.context.scene.collection.objects)
[]
```
## selected objects
初期状態に対して、例えば、
```py
>>> bpy.data.objects['Light'].select_set(True)
```
とすると、
```py
>>> bpy.context.selected_objects
[bpy.data.objects['Cube'], bpy.data.objects['Light']]
```
```py
>>> list(bpy.context.view_layer.objects.selected)
[bpy.data.objects['Cube'], bpy.data.objects['Light']]
```
となる。active object や、context object は元のままである。
ちなみに、
```py
>>> bpy.data.objects['Light'].hide_set(True)
```
とすると、selected が False になる。
```py
>>> bpy.context.selected_objects
[bpy.data.objects['Cube']]
```
```py
>>> list(bpy.context.view_layer.objects.selected)
[bpy.data.objects['Cube']]
```

## active object と context object
[`bpy.types.Object`](https://docs.blender.org/api/current/bpy.types.Object.html) に active 状態を操作する属性は無い。
初期状態に対して、
```py
>>> bpy.data.objects['Cube'].select_set(False)
```
としても、
```py
>>> bpy.data.objects['Cube'].hide_set(True)
```
としても、active object と context object は変わらない。
```py
>>> bpy.context.active_object
bpy.data.objects['Cube']
```
```py
>>> bpy.context.view_layer.objects.active
bpy.data.objects['Cube']
```
```py
>>> bpy.context.object
bpy.data.objects['Cube']
```
このとき、active かつ context object であるが、selected object ではなくなる。
```py
>>> bpy.context.selected_objects
[]
```
```py
>>> list(bpy.context.view_layer.objects.selected)
[]
```
active object を指定するには、
```py
>>> bpy.context.view_layer.objects.active = bpy.data.objects['Light']
>>> bpy.context.view_layer.objects.active = None
```
などとする。active になっても、selected にはならない。
私が考える限りでは、active object と context object は同じである。