MRが楽しい

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

Blender2.9で利用可能なpythonスクリプトを作る その74(オブジェクトの選択状態)

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

オブジェクトの選択状態を変更する

指定名のオブジェクトの選択状態を変更します。
複数のオブジェクトを同時に選択状態にすることができます。
・Script_change_meshlist_select.py

# bpyインポート
import bpy

# メッシュタイプのオブジェクトの選択状態を変更する
def change_meshlist_select(arg_objectlist:list, arg_select:bool) -> bool:
    """メッシュタイプのオブジェクトの選択状態を変更する

    Args:
        arg_objectlist (list): オブジェクトリスト
        arg_select (bool): 変更する選択状態

    Returns:
        bool: 実行正否
    """

    # オブジェクトリストを取得する
    for target_obj in arg_objectlist:
        # 要素がオブジェクトかチェックする
        if(type(target_obj) != bpy.types.Object):
            # オブジェクト以外の要素が混ざっていれば処理しない
            return False
        else:
            if(target_obj.type != 'MESH'):
                # メッシュタイプ以外の要素が混ざっていれば処理しない
                return False

    # オブジェクトリストを取得する
    for target_obj in arg_objectlist:
        # 選択状態を変更する
        target_obj.select_set(arg_select)

    return True

# 関数の実行例

# 対象となるオブジェクト名のリストを作成する
objectname_list = [
    "Cube",
    "Sphere",
    "Cylinder",
]
# オブジェクトリスト用の空リストを作成する
object_list = []
# オブジェクトを取得する
for name in objectname_list:
    # 指定オブジェクトを取得する
    target_obj = bpy.data.objects.get(name)
    # 同名のオブジェクトが存在していたか確認する
    if target_obj != None:
        # 存在していればリストに追加する
        object_list.append(target_obj)

change_meshlist_select(
    arg_objectlist=object_list,
    arg_select=True
)

f:id:bluebirdofoz:20201205033322j:plain

選択中のオブジェクトリストを取得する

選択中のメッシュタイプのオブジェクトのリストを取得します。
・Script_get_meshlist_select.py

# bpyインポート
import bpy

# 選択中のメッシュタイプのオブジェクトのリストを取得する
def get_meshlist_select() -> list:
    """メッシュタイプのオブジェクトのリストの選択状態を変更する

    Returns:
        list: オブジェクトリスト
    """

    # オブジェクトリスト用の空リストを作成する
    object_list = []

    # 有効なコレクションを取得する
    collection_list = bpy.context.scene.collection.children

    # 各レイヤーコレクションを精査する
    for collection in collection_list:
        # コレクション内のオブジェクトリストを取得する
        obj_list = collection.objects
        # オブジェクトのリストを精査する
        for obj in obj_list:
            # メッシュタイプか確認する
            if(obj.type == 'MESH'):
                # 選択状態か確認する
                if obj.select_get() == True:
                    # 選択状態であればリストに追加する
                    object_list.append(obj)

    return object_list

# 関数の実行例
object_list = get_meshlist_select()
for target_obj in object_list:
    print(target_obj.name)

f:id:bluebirdofoz:20201205033333j:plain