MRが楽しい

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

Blender3.0で利用可能なpythonスクリプトを作る その103(処理するオブジェクト名を正規表現で指定する)

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

処理するオブジェクト名を正規表現で指定する

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

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

サンプルスクリプト

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

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

# 指定の正規表現とオブジェクト名が一致したオブジェクトを選択状態にする
def select_object_patternmatch(arg_pattern:str) -> bool:
    """指定の正規表現とオブジェクト名が一致したオブジェクトを選択状態にする

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

    Returns:
        bool -- 実行成否
    """
    
    # 処理対象のオブジェクトリストを作成する
    targetobject_list = []

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

    # 対象のオブジェクトがあったか
    if len(targetobject_list) <= 0:
        # 対象のオブジェクトが無かった場合Falseを返す
        return False

    # 対象のオブジェクトを全て処理する
    for target_obj in targetobject_list:
        # 処理対象のオブジェクトが編集モードになるよう選択状態とする
        select_object(target_obj)

    return True

# 指定のオブジェクトを選択状態にする
def select_object(arg_object:bpy.types.Object) -> bool:
    """指定のオブジェクトを選択状態にする

    Keyword Arguments:
        arg_object {bpy.types.Object} -- 対象オブジェクト

    Returns:
        bool -- 実行成否
    """
    
    # 指定のオブジェクトを選択状態にする
    arg_object.select_set(True)

    # 実行成否を返却する
    return True

# 関数の実行例
# 指定の正規表現とオブジェクト名が一致したオブジェクトを選択状態にする
select_object_patternmatch(r".*Board\d*")

・実行前
f:id:bluebirdofoz:20220217233924j:plain
・実行後
f:id:bluebirdofoz:20220217233945j:plain

参考ページ

note.nkmk.me
note.nkmk.me