MRが楽しい

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

Blender2.8で利用可能なpythonスクリプトを作る その67(スクリプトの読み込みと実行)

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

スクリプトの読み込みと実行

指定名のスクリプトを実行します。
プロジェクト内に指定名のスクリプトが存在しない場合はプロジェクトディレクトリにある同名のpythonスクリプトを読み込んで実行します。
・Script_execute_script.py

# bpyインポート
import bpy
# パス操作のため
import os

# 指定名のスクリプトを実行する
# 指定名のスクリプトが存在しない場合はプロジェクトディレクトリにある同名のpythonスクリプトを読み込む
def execute_script(arg_scriptame="Default") -> bool:


    # 指定名のスクリプトを取得する(get関数は対象が存在しない場合 None が返る)
    scripttext = bpy.data.texts.get(arg_scriptame)

    # スクリプトが存在しない場合はプロジェクトディレクトリの同名ファイルを取得する
    if scripttext == None:
        # blendファイルのパスを取得
        filepath = bpy.data.filepath

        # 空文字が返った場合は処理せず終了する
        if filepath == "":
            return False

        # ディレクトリパスを取得する
        dirpath = os.path.dirname(filepath)

        # スクリプトパスを作成する
        scriptpath = dirpath + "\\" + arg_scriptame
        
        # スクリプトの存在確認を行う
        if os.path.isfile(scriptpath) != True:
            # 指定スクリプトが存在しない場合は処理しない
            return False

        # スクリプトファイルを読み込み
        scripttext = bpy.data.texts.load(filepath=scriptpath)

    # Contextオーバーライドのため、Contextをコピーする
    # (https://docs.blender.org/api/blender2.8/bpy.ops.html#overriding-context)
    exec_context = bpy.context.copy()

    # テキストエディターに取得したスクリプトを設定する
    exec_context['edit_text'] = scripttext

    # Contextを指定してスクリプト実行を行う
    bpy.ops.text.run_script(exec_context)

    return True


# 関数の実行例
execute_script(arg_scriptame="メッシュ結合.py")

・実行前
f:id:bluebirdofoz:20201001182206j:plain
f:id:bluebirdofoz:20201001182234j:plain

・実行後
f:id:bluebirdofoz:20201001182242j:plain