MRが楽しい

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

Blenderで利用可能なpythonスクリプトを作る その17(メッシュとアーマチュアの選択と関連付け)

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

メッシュオブジェクトとアーマチュアの関連付け

最上位階層にあるメッシュオブジェクトと指定のアーマチュアの関連付けを行います。
引数でアーマチュアを指定できます。
・setparent_armature.py

# bpyインポート
import bpy

# シーン内の最上位階層のメッシュオブジェクトのみ選択する
# 引数
# 戻り値
def select_parent_meshobject():
  # シーン内の全てのオブジェクトを走査する
  for check_obj in bpy.context.scene.objects:
    # オブジェクトの親オブジェクト(parent)を取得する
    parent_obj = check_obj.parent
    # 親オブジェクトが取得できたかチェックする
    if parent_obj == None:
      # 親が取得できなければ最上位階層のオブジェクト
      # メッシュオブジェクトであるかチェックする
      if check_obj.type=='MESH':
        # 最上位階層のオブジェクトかつメッシュの場合
        # オブジェクトを選択状態にする
        check_obj.select = True
    else:
      # 親が取得できれば子オブジェクト
      # オブジェクトを非選択状態にする
      check_obj.select = False
  return


# メッシュオブジェクトとアーマチュアの関連付けを行う
# アーマチュア:指定オブジェクト
# メッシュ:最上位階層のメッシュオブジェクト
# 引数   arg_objectname:指定オブジェクト名
# 戻り値
def setparent_armature_parentmeshs(arg_objectname='Default'):
  # 指定オブジェクトを取得する
  selectob=bpy.context.scene.objects[arg_objectname]
  # 指定オブジェクトがアーマチュアオブジェクトかチェックする
  if selectob.type=='ARMATURE':
    # 指定オブジェクトがアーマチュアの場合
    # 最上位階層のメッシュオブジェクトを選択状態にする
    select_parent_meshobject()
    # 指定オブジェクトをアクティブにする
    bpy.context.scene.objects.active=selectob
    # アーマチュアオブジェクトを選択状態かつアクティブする
    selectob.select=True
    bpy.context.scene.objects.active=selectob
    # アーマチュアの関連付けを実行する
    bpy.ops.object.parent_set(type='ARMATURE')
  return


# 関数の実行例
setparent_armature_parentmeshs('Character1_Reference')

f:id:bluebirdofoz:20190619092422j:plain