MRが楽しい

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

Blender2.8で利用可能なpythonスクリプトを作る その70(プロジェクトまたはスクリプトフォルダの外部Pythonスクリプトを参照する)

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

プロジェクトフォルダの外部Pythonスクリプトを参照する

Blenderプロジェクトフォルダ(.blend)にあるPythonスクリプトをインポートして利用します。
プロジェクトフォルダをシステムパスに加えることで参照しています。
・Script_import_script_by_blendfolder.py

# 各種ライブラリインポート
import sys, os
import bpy

## エディタ実行時に追加ライブラリを参照するため
## 読み込みスクリプトのディレクトリをシステムパスに追加する
# Blenderプロジェクトのファイルパスを取得
blend_filepath = bpy.data.filepath
# Blenderプロジェクトの読み込み元のディレクトリパスを取得
blend_dirpath = os.path.dirname(blend_filepath)
# 読み込み元のディレクトリパスをシステムパスに追加
sys.path += [blend_dirpath]

# 追加ライブラリのインポート
import Script_print_test

# ライブラリの関数を呼び出す
Script_print_test.method_print_test("blend_filepath : " + blend_filepath)
Script_print_test.method_print_test("blend_dirpath : " + blend_dirpath)
Script_print_test.method_print_test("Test Message")

・Script_print_test.py

# 各種ライブラリインポート
import bpy

# メッセージを表示する
def method_print_test(arg_str:str) -> bool:
    """メッセージを表示する

    Args:
        arg_str (str): 表示メッセージ

    Returns:
        bool: 実行正否
    """
    # メッセージを表示する
    print(arg_str)

    return True

f:id:bluebirdofoz:20201020230859j:plain

プロジェクトフォルダの外部Pythonスクリプトを参照する

Blenderプロジェクトフォルダ(.blend)にあるPythonスクリプトをインポートして利用します。
プロジェクトフォルダをシステムパスに加えることで参照しています。
・Script_import_script_by_scriptfolder.py

# 各種ライブラリインポート
import sys, os
import bpy

## エディタ実行時に追加ライブラリを参照するため
## 読み込みスクリプトのディレクトリをシステムパスに追加する
# 実行中のスクリプト名を取得
script_filename = os.path.basename(__file__)
# 読み込み中のテキストファイルリストからファイルパスを取得
script_filepath = bpy.data.texts[script_filename].filepath
# スクリプトの読み込み元のディレクトリパスを取得
script_dirpath = os.path.dirname(script_filepath)
# 読み込み元のディレクトリパスをシステムパスに追加
sys.path += [script_dirpath]

# 追加ライブラリのインポート
import Script_print_test

# ライブラリの関数を呼び出す
Script_print_test.method_print_test("script_filename : " + script_filename)
Script_print_test.method_print_test("script_filepath : " + script_filepath)
Script_print_test.method_print_test("script_dirpath : " + script_dirpath)
Script_print_test.method_print_test("Test Message")

・Script_print_test.py

# 各種ライブラリインポート
import bpy

# メッセージを表示する
def method_print_test(arg_str:str) -> bool:
    """メッセージを表示する

    Args:
        arg_str (str): 表示メッセージ

    Returns:
        bool: 実行正否
    """
    # メッセージを表示する
    print(arg_str)

    return True

f:id:bluebirdofoz:20201020230907j:plain