MRが楽しい

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

Blender3.0で利用可能なpythonスクリプトを作る その96(メッシュの編集モードに移行可能か確認して移行する)

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

メッシュの編集モードに移行可能か確認して移行する

Blender の Operator ではその関数が現在実行可能か poll 関数を利用することで確認できます。
bluebirdofoz.hatenablog.com

ただしモードを移行する mode_set 関数では引数にモードを指定するため、個別のモード以降ごとのチェックができません。
よって今回はアクティブオブジェクトが MESH オブジェクトかチェックすることで実行可否を判定しました。

サンプルスクリプト

現在選択中のオブジェクトをチェックして MESH オブジェクトであれば編集モードに移行可能と判定して移行します。
・Script_change_viewmodet.py

# bpyインポート
import bpy

# 編集モードへ移行可能かチェックして移行する
# モード切替のマニュアル
# (https://docs.blender.org/api/current/bpy.ops.object.html#bpy.ops.object.mode_set)
def change_mode_edit() -> bool:
    """編集モードへ移行可能かチェックして移行する

    Returns:
        bool -- 実行の正否
    """

    # 現在のアクティブオブジェクトの参照を取得する
    active_object = bpy.context.view_layer.objects.active

    # 指定オブジェクトがメッシュか確認する
    if active_object.type != 'MESH':
        # メッシュでない場合は編集モードに移行しない
        return False

    # 編集モードに移行する
    set_mode_edit()

    return True

# 編集モードへの移行
# モード切替のマニュアル
# (https://docs.blender.org/api/current/bpy.ops.object.html#bpy.ops.object.mode_set)
def set_mode_edit() -> bool:
    """編集モードへの移行

    Returns:
        bool -- 実行の正否
    """

    # 編集モードに移行する
    # モード切替のマニュアル
    # (https://docs.blender.org/api/current/bpy.ops.object.html#bpy.ops.object.mode_set)
    # mode:EDIT 編集モードに切り替え
    # toggle:True の場合、既に編集モードの時、オブジェクトモードに戻る
    bpy.ops.object.mode_set(mode='EDIT', toggle=False)
    return True

# 関数の実行例
# 「編集モード(EDIT_MESH)」に移行可能なら移行する
result = change_mode_edit()
# 結果をコンソールに表示する
print("Set EditMode : " + str(result))

・移行可能な場合
f:id:bluebirdofoz:20220111232519j:plain
f:id:bluebirdofoz:20220111232530j:plain

・移行できない場合
f:id:bluebirdofoz:20220111232539j:plain
f:id:bluebirdofoz:20220111232550j:plain