MRが楽しい

MRやVRについて学習したことを書き残す

Blender3.0で利用可能なpythonスクリプトを作る その123(指定アーマチュア内の指定ボーンを参照する)

本日は Blender の技術調査枠です。
Blender3.0で利用可能なpythonスクリプトを作ります。

指定アーマチュア内の指定ボーンを参照する

ボーンの参照にはボーンを含むアーマチュアオブジェクトの bones 変数からアクセスできます。
docs.blender.org

取得できる Bone データからは以下の情報が参照できます。
docs.blender.org

サンプルスクリプト

アーマチュアオブジェクトとボーン名を指定すると、指定のボーンデータの参照を取得できます。
・Script_select_bone_target.py

# bpyインポート
import bpy

# 指定アーマチュア内の指定ボーンを参照する
def select_bone_target(arg_targetobject:bpy.types.Object, arg_bonename:str) -> bpy.types.Bone:
    """指定アーマチュア内の指定ボーンを参照する

    Keyword Arguments:
        arg_targetobject {bpy.types.Object} -- 対象オブジェクト
        arg_bonename {str} -- 対象ボーン名

    Returns:
        bool -- 実行の正否
    """

    # 指定オブジェクトがアーマチュアか確認する
    # オブジェクトタイプの一覧
    # (https://docs.blender.org/api/current/bpy.types.Object.html#bpy.types.Object.type)
    if arg_targetobject.type != 'ARMATURE':
        # アーマチュアでない場合はボーンを取得しない
        return None

    # アーマチュア内の指定ボーンを取得する(有効状態のレイヤー内のボーンのみ対象)
    target_bone = arg_targetobject.data.bones.get(arg_bonename)

    return target_bone

# 関数の実行例
# 指定アーマチュア内の指定ボーンを参照する
get_bone = select_bone_target(
    arg_targetobject=bpy.data.objects.get("metarig"),
    arg_bonename="control.ChinIK")
# 取得したボーン名とボーンの長さを表示する
# ボーン操作のマニュアル
# (https://docs.blender.org/api/current/bpy.types.Bone.html)
print("Bone : name = " + get_bone.name + ", length = " + str(get_bone.length))