本日は Blender の技術調査枠です。
Blender3.0で利用可能なpythonスクリプトを作ります。
指定ボーンのエディットボーン情報を参照する
ボーンの編集データは bpy.types.EditBone データで参照できます。
編集データではボーンのヘッドやテールの位置情報を参照したりすることができます。
docs.blender.org
docs.blender.org
docs.blender.org
サンプルスクリプト
アーマチュアオブジェクトとボーン名を指定すると、指定のボーンの編集データの参照を取得できます。
・Script_sow_bone_target_editbone.py
# bpyインポート import bpy # アーマチュア内の指定ボーンの編集ボーン情報を参照する def select_editbone_target(arg_targetobject:bpy.types.Object, arg_bonename:str) -> bpy.types.EditBone: """アーマチュア内の指定ボーンのポーズボーン情報を参照する Keyword Arguments: arg_targetobject {bpy.types.Object} -- 対象オブジェクト arg_bonename {str} -- 対象ボーン名 Returns: bpy.types.EditBone -- 編集ボーン情報 """ # 指定オブジェクトがアーマチュアか確認する # オブジェクトタイプの一覧 # (https://docs.blender.org/api/current/bpy.types.Object.html#bpy.types.Object.type) if arg_targetobject.type != 'ARMATURE': # アーマチュアでない場合はボーンを取得しない return None # アーマチュア内の編集ボーンデータの指定ボーンを取得する target_editbone = arg_targetobject.data.edit_bones.get(arg_bonename) if target_editbone == None: # ボーンを取得できない場合は処理を終了する return None return target_editbone # 関数の実行例 # 指定アーマチュア内の指定ボーンを参照する get_editbone = select_editbone_target( arg_targetobject=bpy.data.objects.get("metarig"), arg_bonename="control.BodyIK") # 取得したボーン名を表示する # 編集ボーン操作のマニュアル # (https://docs.blender.org/api/3.0/bpy.types.EditBone.html) print(f"Bone : name = {get_editbone.name} , length = {get_editbone.length:.05f}") # 編集ボーンデータの座標と回転を参照する print("EditBone Head location : " + f"{get_editbone.head[0]:.05f} ," + f"{get_editbone.head[1]:.05f} ," + f"{get_editbone.head[2]:.05f}") print("EditBone Tail location : " + f"{get_editbone.tail[0]:.05f} ," + f"{get_editbone.tail[1]:.05f} ," + f"{get_editbone.tail[2]:.05f}")