MRが楽しい

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

Blender3.0で利用可能なpythonスクリプトを作る その136(正規表現の指定でオブジェクトの参照リストを取得する)

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

正規表現の指定でオブジェクトの参照リストを取得する

python で文字列が正規表現に完全一致するか確認するには re.fullmatch を利用します。
docs.python.org

オブジェクト名は bpy.types.Object の name から取得可能です。
docs.blender.org

サンプルスクリプト

以下のサンプルスクリプトを作成しました。
arg_pattern 引数の正規表現に完全一致するオブジェクト名を持つオブジェクトの参照リストを返します。
・Script_get_objectlist_patternmatch.py

# bpyインポート
import bpy
# 正規表現を利用するためインポート
import re

# 指定の正規表現とオブジェクト名が一致したオブジェクトの参照リストを返す
def select_object_patternmatch(arg_pattern:str) -> list:
    """指定の正規表現とオブジェクト名が一致したオブジェクトの参照リストを返す

    Keyword Arguments:
        arg_pattern {str} -- 指定文字列

    Returns:
        list -- オブジェクトの参照リスト
    """
    
    # 処理対象のオブジェクトリストを作成する
    targetobject_list = []

    # シーン内の全オブジェクトを走査する
    for check_obj in bpy.context.scene.objects:
        # オブジェクト名が指定の正規表現と一致するか
        if re.fullmatch(arg_pattern, check_obj.name):
            # 一致すれば対象とする
            targetobject_list.append(check_obj)

    # リストを返却する
    return targetobject_list

# 関数の実行例
# 指定の正規表現とオブジェクト名が一致したオブジェクトのリストを取得する
# ("Cube.00~ のオブジェクト名を持つオブジェクトを指定")
targetobj_list = select_object_patternmatch(r"Cube\.00.+")

# シーン内の全オブジェクトを走査する
for check_obj in bpy.context.scene.objects:
    # 一旦すべてのオブジェクトを非選択状態にする
    check_obj.select_set(False)

# 取得した対象オブジェクトを走査する
for check_obj in targetobj_list:
    # 全ての対象オブジェクトを選択状態にする
    check_obj.select_set(True)

・実行前

・実行後