MRが楽しい

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

Blenderで利用可能なpythonスクリプトを作る その14(オブジェクトの親子関係の取得)

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

オブジェクトの親オブジェクトを取得する

オブジェクトの親オブジェクトをチェックして最上位オブジェクトを選択します。
最上位オブジェクトは親オブジェクトを取得できません。

・object_tree.py

# bpyインポート
import bpy

# シーン内の最上位のオブジェクトのみ選択する
# 引数   arg_objectname:指定オブジェクト名
# 戻り値
def select_parent_object():
  # シーン内の全てのオブジェクトを走査する
  for check_obj in bpy.context.scene.objects:
    # オブジェクトの親オブジェクト(parent)を取得する
    parent_obj = check_obj.parent
    # 親オブジェクトが取得できたかチェックする
    if parent_obj == None:
      # 親が取得できなければ最上位オブジェクト
      # オブジェクトを選択状態にする
      check_obj.select = True
      print(check_obj.name + ' is parent')
    else:
      # 親が取得できれば子オブジェクト
      # オブジェクトを非選択状態にする
      check_obj.select = False
      print(check_obj.name + ' is children')
  return


# 関数の実行例
select_parent_object()

f:id:bluebirdofoz:20190613085811j:plain

オブジェクトの子オブジェクトの一覧を取得する

オブジェクトの子オブジェクトをチェックして再帰的に選択します。
子オブジェクトは直下のオブジェクト群をタプルで取得できます。

・object_tree.py

# bpyインポート
import bpy

# 指定オブジェクトとその全ての子オブジェクトを選択する
# 引数   arg_objectname:指定オブジェクト名
# 戻り値
def select_children_object(arg_objectname='Default'):
  # 指定オブジェクトを取得する
  check_obj = bpy.data.objects[arg_objectname]
  # オブジェクトを選択状態にする
  check_obj.select = True
  # 指定オブジェクトの子オブジェクト(children)を取得する
  children_objs = check_obj.children
  # 子オブジェクトはタプルで取得される
  # 全ての子オブジェクトをチェックする
  for children_obj in children_objs:
    # 子オブジェクトを再帰的に走査して選択する
    select_children_object(children_obj.name)
    print(check_obj.name + '->' + children_obj.name)
  return


# 関数の実行例
select_children_object('Sphere')

f:id:bluebirdofoz:20190613085821j:plain