コンテンツにスキップ

BlenderPythonの基本(1) dataアクセス

1
2
3
import bpy

print(bpy.data) # BlendData

BlenderPythonの全体図

BlenderのAPIは、ざっくりと書き出すとこのようになっています。
まず、すべての親クラスとして bpy_struct があります。
これは、直接このクラスを使うことはなく、継承したクラスを介して使用します。

たとえば、そのオブジェクトがさすポインタ( as_pointer )であったり、
カスタムアトリビュート関連の関数などがこれにあたります。

そしてそれを継承して、WindowであったりBlendDataCollections、Node(NodeEditorのノードなど)といった
Blenderを構成する各クラスが作成されます。

その中で、DataBlock関係のクラスは「ID」クラスを継承して作成されています。
userの指定、ノード名、といったDataBlockに関連する関数やプロパティは
このIDにまとめられています。
そして、このIDを継承したクラスが、各Data Block用のクラスです。

こののDataは、bpy.data の BlendDataオブジェクトから取得できます。

1
2
for obj in bpy.data.objects:
    print(obj)
1
2
3
<bpy_struct, Object("Camera") at 0x0000013851AF5608>
<bpy_struct, Object("Cube") at 0x0000013851AF4808>
<bpy_struct, Object("Light") at 0x0000013851AF4108>

dataAPI

bpy.dataで取得できる値は、Blend-File Dataをみると構造がわかりやすいです。

例えば、 versionであれば

1
print(bpy.data.version)

で、現在のバージョンのタプルを取得できます。

1
print(bpy.data.meshes)

で、Meshを取得できます。
Mesh等は、bpy_collection という型になっていて、indexまたはNodeNameで取得できます。

1
2
print(bpy.data.meshes['Cube'])
print(bpy.data.meshes[0])

bpy.data.objectsから関係オブジェクトを探す

例えば、コンストレインのようにオブジェクトに対して指定されるような
設定を取得したい場合。

1
2
3
4
5
6
cube = bpy.data.objects['Cube']
# Objectから、Constraintオブジェクトを取得
for const in cube.constraints:
    print(const.name)
    targetObject = const.target
    print(targetObject.name)

Objectには、constraints があるので
これを利用して指定されたコンストレインオブジェクトを取得します。

Constraintのページを見ると、Blenderで対応しているConstraintの一覧があるので
プロパティや関数を使用すると、Pythonから取得したい値を取得することができます。