【Blender 】Blender API について

Blender は Ver.2.79 です。
よく使うものだけメモとして残しておきます。
間違っている場合など、ご指摘下さい。

公式は以下。 docs.blender.org


目次


よく使うデータアクセス系(bpy.data)

bpy.data は、Blender データへのアクセスに使用します。

オブジェクト(bpy.data.objects)

下記でオブジェクトを取得可能。

bpy.data.objects['オブジェクトの名前']

オブジェクトのプロパティ/メソッド

プロパティ名 内容
name オブジェクトの名前。
type オブジェクトのタイプ。
'MESH','OBJECT','ARMATURE'等
parent オブジェクトの親。存在しない場合は None が返る。
親を設定するときによく使う。
逆に親を設定したくない場合は、None を設定する。
parent_type 親のタイプ。
Armatureを親にした場合は、'BONE'を設定出来る。
parent_bone 上記の parent_type で 'BONE' を指定している場合に使用する。
どの BONE が親になるかを指定する。
指定する内容は BONE の名前。
constraints['名前']
constraints[index]
名前やインデックス(何番目か)を指定することにより、コンストレイントを取得できる。
例えば 'IK' や 'Copy Rotation' 等。
存在しない場合はエラー。
constraints.find('名前') 名前を指定することにより、指定したコンストレイントのインデックスが返る。
存在しない場合は -1 が返る。
select 選択状態を表します。
True を設定した場合は選択状態。
False を設定した場合は非選択状態となります。

コード例

「全オブジェクト名を列挙したい!」とか。

for x in bpy.data.objects:
    print(x.name)

コンストレイント(bpy.data.objects.constraints)

下記でオブジェクトに設定しているコンストレイントを取得可能。

bpy.data.objects['オブジェクトの名前'].constraints['コンストレイントの名前']

コンストレイントのプロパティ/メソッド

基本のプロパティ

以下のプロパティは、大体、どのコンストレイントにもあるかと…。

プロパティ名 内容
target どのオブジェクトを対象にするか。
subtarget どのボーンを対象にするか。
これは target が Armature の場合のみ指定可能です。
mute Disable/Enable の切替。
Trueの場合、無効。Falseの場合、有効となります。

よく使うコンテキスト系(bpy.context)

bpy.context は、現在の状態に対してアクセスするのに使用します。
選択中のオブジェクトや、ボーンなどに対してアクセスする際に便利です。

選択中のオブジェクト

下記で選択中のオブジェクトを取得可能。

bpy.context.selected_objects

コード例

「選択中のオブジェクト名を列挙したい!」とか。
返ってくるのは、基本、bpy.data で取得したものと同様なので同じような感じですが…。

for x in bpy.context.selected_objects:
    print(x.name)

「選択中のオブジェクトでCopy Locationが設定されているもののみ列挙したい!」とか。
(※) コンストレイント名が"Copy Location"になっている場合のみ有効

for x in bpy.context.selected_objects:
    if x.constraints.find('Copy Location') != -1:
        print(x.name)

選択中のボーン

下記で選択中のボーンを取得可能。
ただし、Armature が ポーズモードになっている必要があります。

bpy.context.selected_pose_bones

コード例

「選択中のボーン名を列挙したい!」とか。

for x in bpy.context.selected_pose_bones:
    print(x.name)

「選択中のボーンでIKが設定されているもののみ列挙したい!」とか。
(※) ボーンコンストレイント名が"IK"になっている場合のみ有効

for x in bpy.context.selected_pose_bones:
    if x.constraints.find('IK') != -1:
        print(x.name)