MRが楽しい

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

Blender2.8で利用可能なpythonスクリプトを作る その40(blendファイルパスと実行スクリプトパスの取得)

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

blendファイルパスを取得する

現在のblendファイルパスを取得します。
未保存のプロジェクト上で実行すると、空文字が返ります。
パス操作と組み合わせてディレクトリパスを取得することもできます。
・get_blend_filepath.py

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

# 現在のblendファイルパスを取得する
# 未保存のプロジェクト上で実行すると、空文字が返る
def get_blend_filepath() -> str:
    """現在のblendファイルパスを取得する
    未保存のプロジェクト上で実行すると、空文字が返る

    Returns:
        str: blendファイルパス
    """

    # blendファイルのパスを取得
    filepath = bpy.data.filepath

    return filepath

# 現在のblendファイルが存在するディレクトリパスを取得する
# 未保存のプロジェクト上で実行すると、空文字が返る
def get_blend_dirpath() -> str:
    """現在のblendが存在するディレクトリパスを取得する
    未保存のプロジェクト上で実行すると、空文字が返る

    Returns:
        str: blendディレクトリパス
    """

    # blendファイルのパスを取得
    filepath = bpy.data.filepath

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

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

    return dirpath

# 関数の実行例
# ファイルパスを表示する
print("filepath = " + get_blend_filepath())
# ディレクトリパスを表示する
print("dirpath = " + get_blend_dirpath())

f:id:bluebirdofoz:20200613204455j:plain

スクリプトファイルパスを取得する

実行中のスクリプトファイルパスを取得します。
未保存のスクリプト上で実行すると、空文字が返ります。
パス操作と組み合わせてディレクトリパスを取得することもできます。
・get_script_filepath.py

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

# 実行中のスクリプトファイルパスを取得する
# 未保存のスクリプト上で実行すると、空文字が返る
def get_script_filepath() -> str:
    """実行中のスクリプトファイルパスを取得する
    未保存のスクリプト上で実行すると、空文字が返る

    Returns:
        str: スクリプトファイルパス
    """

    # 実行中のスクリプト名を取得する
    script_filename = os.path.basename(__file__)

    # スクリプトファイルのパスを取得
    script_filepath = bpy.data.texts[script_filename].filepath

    return script_filepath

# 実行中のスクリプトファイルが存在するディレクトリパスを取得する
# 未保存のスクリプト上で実行すると、空文字が返る
def get_script_dirpath() -> str:
    """実行中のスクリプトが存在するディレクトリパスを取得する
    未保存のスクリプト上で実行すると、空文字が返る

    Returns:
        str: スクリプトディレクトリパス
    """

    # 実行中のスクリプト名を取得する
    script_filename = os.path.basename(__file__)

    # スクリプトファイルのパスを取得
    script_filepath = bpy.data.texts[script_filename].filepath

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

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

    return script_dirpath

# 関数の実行例
# ファイルパスを表示する
print("filepath = " + get_script_filepath())
# ディレクトリパスを表示する
print("dirpath = " + get_script_dirpath())

f:id:bluebirdofoz:20200613204506j:plain