スクリプト関数を再利用するため、ファイルを分ける

Shade3Dで単体のスクリプトとしての実行の場合(scriptsフォルダに.pyのファイルを置く)は、
1つの処理を1つのpyファイルに記述します。
このときに、よく使う関数などを別ファイル(拡張子py)に分離してそれを再利用できるようにします。

スクリプトの配置場所

スクリプトは「ドキュメントフォルダ/Shade3D/Shade3Dのバージョン」の下の「scripts」フォルダ内に配置します。

Shade3D ver.18のとき、
Windows環境の場合は、「C:\Users\ログインユーザ名\Documents\Shade3D\Shade3D ver.18\scripts」に格納します。
Mac OS X環境の場合は、「/Users/ログインユーザ名/Documents/Shade3D/Shade3D ver.18/scripts」に格納します。

このフォルダに配置した拡張子pyのファイルは、Shade3Dを再起動した場合にメインメニューの「スクリプト」からアクセスできます。
サブフォルダを作成した配置した場合は、メインメニューの「スクリプト」内でサブメニューで表示されます。
また、この「scripts」フォルダ内のファイルをimportを使って分離して管理することはできません。

スクリプトで検索フォルダを追加

Shade3D内でのPythonスクリプトの検索パスは、以下で一覧できます。


import sys
import pprint

pprint.pprint(sys.path)

実行すると以下のように表示されました。


['',
 'C:/Program Files/Shade3D/Shade3D ver.18/bin/Python27.zip',
 'C:/Program Files/Shade3D/Shade3D ver.18/bin/Python27',
 'C:/Program Files/Shade3D/Shade3D ver.18/bin/Python27/Lib',
 'C:/Program Files/Shade3D/Shade3D ver.18/bin/Python27/DLLs',
 'C:/Program Files/Shade3D/Shade3D ver.18/bin/Python27/Lib/site-packages']

このパスに対して、「C:/Users/ログインユーザ名/Documents/Shade3D/Shade3D ver.18/scripts_sub」というフォルダを追加します。
Mac OS Xの場合は「/Users/ログインユーザ名/Documents/Shade3D/Shade3D ver.18/scripts_sub」を追加します。


import sys

# 新たに検索パスを追加。同一のパスを追加しないようにしている.
def appendSysPath(newPath):
  existF = False
  for path in sys.path:
    if path == newPath:
      existF = True
      break

  if existF:
    return

  sys.path.append(newPath)

appendSysPath("C:/Users/ログインユーザ名/Documents/Shade3D/Shade3D ver.18/scripts_sub")

ドキュメントのパスはスクリプトメニューからのPython呼び出しの場合は
「xshade.shade().script_path」を使用することで「C:/Users/ログインユーザ名/Documents/Shade3D/Shade3D ver.18/scripts/test1.py」のようにフルパスで取得できます。
この文字列から「/scripts/test1.py」をカットして「C:/Users/ログインユーザ名/Documents/Shade3D/Shade3D ver.18」+「/scripts_sub」を文字列として生成するのがいいかもしれません。
ただし、スクリプトウィンドウから「xshade.shade().script_path」を呼び出しても””が返され、パスを取得できません。

ファイルを分けたスクリプトの記述

呼び出し先で使用するスクリプトファイルを
「C:/Users/ログインユーザ名/Documents/Shade3D/Shade3D ver.18/scripts_sub」に格納するとします。
「scripts_sub」フォルダを作成し、「hello.py」として以下のように記述しました。


def showMessage():
  print "Hello Shade3D."

呼び出し元側として、以下のスクリプトを記載します。


# 新たに検索パスを追加.
def appendSysPath(newPath):
  existF = False
  for path in sys.path:
    if path == newPath:
      existF = True
      break

  if existF:
    return

  sys.path.append(newPath)

# 検索パスを追加.
appendSysPath("C:/Users/ログインユーザ名/Documents/Shade3D/Shade3D ver.18/scripts_sub")

# 「scripts_sub」フォルダに配置した「hello.py」をインポート.
import hello

# 関数実行.
hello.showMessage();

これで、別ファイルの「hello.py」の関数を実行できました。

Translate »