v6.01
Plugin オブジェクト内部の Variant データを設定したり、戻したりします。Softimage では、データのコンテンツや意味によって制限されることはありません。簡単なタイプ、Array、オブジェクトリファレンスなどの広範なデータを保存できます。追加されると、Softimage が実行されている間、またはプラグインを手動でアンロードするまでの間、データはアクティブな状態になります。ユーザデータは継承されません。
注:Plugin.UserData は、通常はプラグインモジュールでローカルでアクセスできる値や、他のプラグインによってグローバルにアクセスできる値を格納するために使用されます。スクリプトプラグインの場合は、プラグインモジュールで定義されているグローバル変数を使用する代わりに、Plugin.UserDataを使用することを強くお勧めします。このことは、プラグインがマルチスレッドで実行されるレンダリングオペレーションのコンテキストで特に重要です。プラグインが別のスレッドで実行される場合は、実行中のスクリプトエンジンのコピーが作成され、もう一度プラグインファイルが解析されます。このプラグインファイルは、プラグイン実装で参照されるプラグイングローバル変数を再初期化します。一方、Plugin.UserData を使用すると、スレッド間の整合性を保つことができます。
// get accessor Object rtn = Plugin.UserData; // set accessor Plugin.UserData = Object; |
# How to access a plug-in user data
from win32com.client.dynamic import Dispatch
# Optional global variable to speed up data access
g_userdata = None
def GetUserData():
if ( g_userdata == None ):
# Dictionary not defined yet
# Get the plug-in object storing the dictionary
myPlugin = Application.Plugins("My plugin");
if ( myPlugin.UserData == None ):
# Dictionary not defined yet, create it and add some object
dict = Dispatch( "Scripting.Dictionary" )
dict[ 'SurfPos' ] = XSIMath.CreateVector3()
dict[ 'OutPos' ] = XSIMath.CreateVector3()
# Store the new dictionary in the plug-in
myPlugin.UserData = dict
# Cache the dictionary in this module for fast access
g_userdata = myPlugin.UserData
return g_userdata |