スクリプト関数を再利用するため、ファイルを分ける
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」の関数を実行できました。