Softimage でPython カスタム モジュールを使って操作する

 
 
 

Python モジュールは、Softimage プラグインの再利用可能コードを記述する際に便利です。 Softimage プラグインのモジュールをインポートするには、まずモジュールのフォルダ パスを Python システム パス(sys.path)に追加して、Python にモジュールの検索場所を伝える必要があります。 Python がモジュール ファイルの検索場所を把握すると、モジュールをプラグインにインポートすることができます。

#---------

import sys

sys.path.append( 'd:\MyModules' )

import moduleA

--------

上の例では、d:¥MyModules に定義された moduleA をインポートします。 複数のパスを sys.path に追加することができますが、パスを追加する順序によって、Python がモジュールを検索する順序が決まることを忘れないでください。

特定のパスを sys.path に追加することが必ずしも一番便利な方法ではありません。 これは特に異なる場所にインストールする必要があるプラグインに当てはまります。 たとえば、モジュールがプラグイン ファイルとともにある場合、プラグイン パスを sys.path に追加する必要があります。 この場合、Softimage によってプラグイン ファイル フォルダ パスに設定される変数 __sipath__ を使用することができます。この変数は常にプラグイン ファイルのネームスペースに定義され、Softimage アプリケーション オブジェクト全体を調べることなくそのまま使用することができます。

#---------

import sys

if __sipath__ not in sys.path:

	sys.path.append( __sipath__ )

import moduleA

--------

上の例では、Python がプラグイン フォルダを検索し、moduleA をインポートします。 このコードでは、__sipath__ は sys.path にのみ追加されます(このチェックが必要なのは、Softimage セッションで 1 つのプラグインを複数回ロードできるためです)。__sipath__ は、プラグイン フォルダに関連する任意のフォルダ パスの指定にも使用することができます。

#---------

import sys

import os

myModules = __sipath__ + os.sep + 'MyModules'

if myModules not in sys.path:

	sys.path.append( myModules )

import moduleA

--------

Softimage sipyutils モジュールには、モジュール パスをより簡単に指定するのに役立つ機能が含まれています。さらに、ソース コード ファイルをモジュールとしてインポートするための機能も含まれており、プラグインの書き込み中にバージョニングを考慮しなければならない場合に便利です。sipyutils モジュール ファイルは、Softimage アプリケーション フォルダ<install_folder>¥Application¥bin¥sipyutils.py にあります。

次の例は、sipyutils に定義された機能の使用方法を示しています。

#---------
Example 1:

# note: for the example, the plug-in's __sipath__ variable is set to d:¥Application¥Plugins


# import the Softimage utility module
	
import sipyutils


#add some paths to python system path

sipyutils.add_to_syspath( __sipath__ )

sipyutils.add_subfolder_to_syspath( __sipath__, 'mysubfolder' )


# import eggs from d:\Application\Plugins

import eggs


def XSILoadPlugin( in_reg ):

	in_reg.Author = "Softimage"

	in_reg.Name = "TestPlugin"

	in_reg.Major = 1

	in_reg.Minor = 0


	in_reg.RegisterCommand( "TestCommand", "TestCommand")


	return True


def TestCommand_Execute(  ):

	# INFO: d:\Application\Plugins\eggs.pyc

	LogMessage( 'eggs.__siplugin_file__ ' + eggs.__siplugin_file__  )	


	# import foo from d:\Application\Plugins\mysubfolder

	import foo

	LogMessage( 'foo.__siplugin_file__ ' + foo.__siplugin_file__  )
	
	return True


Example 2:


import sipyutils


sipyutils.add_to_syspath( __sipath__ )


# import foo.py from d:\Application\Plugins

# INFO: d:\Application\Plugins\foo.pyc

import foo

LogMessage( foo.__siplugin_file__ )

	
# import foo.py from d:\Application\Plugins\mysubfolderA

foo = sipyutils.import_source( __sipath__ + os.sep + 'mysubfolderA' + os.sep + 'foo.py' )

# INFO: d:\Application\Plugins\mysubfolderA\foo.pyc

LogMessage( foo.__siplugin_file__ )


# import foo.py from d:\Application\Plugins\mysubfolderB

foo = sipyutils.import_source( __sipath__ + os.sep + 'mysubfolderB' + os.sep + 'foo.py' )

# INFO: d:\Application\Plugins\mysubfolderB\foo.pyc

LogMessage( foo.__siplugin_file__ )

---------