自己インストールされるコールバック(プラグイン ベースのプロパティのコールバック)は、プロパティの名前を使用して名前が付けられます。たとえば、MyProperty_DefineLayout や MyProperty_MyButton_OnClicked の場合、MyProperty が PluginRegistrar.RegisterProperty や PluginRegistrar::RegisterProperty の呼び出しで使用される名前になります。
一方、処理中のプロパティ(ランタイムベースのプロパティ)はコールバック名にプロパティ名を使用しないため、たとえば PPGEvent コールバックは単純に PPGEvent と命名され、ボタンの OnClicked コールバックは MyButton_OnClicked という名前になります。
プラグイン ベースのプロパティとランタイム ベースのプロパティの両方で、プリフィックスを使用することができます。プリフィックスは、単一のファイル内で複数のイベント ハンドラを区別するためのネームスペースです。この場合、siUILogicPrefix レイアウト属性を設定することによってプリフィックスを指定できます。指定したプリフィックスは PPGLayout.Logic または PPGLayout::GetLogic のすべてのハンドラで必要になります。
たとえば、プリフィックスが MyPlugin_ の場合、Softimage では MyPlugin_PPGEvent という名前のハンドラが必要になります(MyProperty_PPGEvent や、単純に PPGEvent ではなく)。同様に、MyProperty_OnClicked や OnClicked のみでなく、MyPlugin_OnClicked ハンドラが必要になります。
プリフィックスやイベント ハンドラの命名規則に関する SPDL ベースのプロパティ、ランタイムのプロパティ、プラグインのプロパティについては、「カスタム プロパティとともにプリフィックスを使用する」を参照してください。このセクションには、ランタイムベースのプロパティおよびプラグイン(自己インストール)プロパティのロジック プリフィックスの指定方法に関する例が記載されています。
DefineLayout コールバックでは、カスタム プロパティにパラメータを追加します。Define コールバックは、Context または Context オブジェクトを入力として取得します。この入力から、CustomProperty または CustomProperty オブジェクトを取得することができます。CustomProperty または CustomProperty オブジェクトは、次のパラメータを追加するメソッドを提供します。
CustomProperty.AddParameter3 または CustomProperty::AddParameter、(オブジェクト モデルのみの場合、AddParameter2 および AddParameter3)
CustomProperty.AddFCurveParameter または CustomProperty::AddFCurveParameter
CustomProperty.AddGridParameter または CustomProperty::AddGridParameter
CustomProperty.AddProxyParameter または CustomProperty::AddProxyParameter
CustomProperty.AddParameterFromDef または CustomProperty::AddParameterFromDef
// JScript code generated by the wizard function MyJsProperty_Define( ctxt ) { var oCustomProperty; oCustomProperty = ctxt.Source; oCustomProperty.AddParameter2("Param",siInt4,0,0,100,0,100,0,siPersistable); return true; } // C++ code generated by the wizard XSIPLUGINCALLBACK CStatus MyCppProperty_Define( CRef& in_ctxt ) { Context ctxt( in_ctxt ); CustomProperty oCustomProperty; Parameter oParam; oCustomProperty = ctxt.GetSource(); oCustomProperty.AddParameter(L"Param",CValue::siInt4,siPersistable,L"",L"",0l,0l,100l,0l,100l,oParam); return CStatus::OK; }
DefineLayout コールバックは、自己インストール カスタム プロパティ用のプロパティ ページにおけるコントロールのレイアウトを定義します。DefineLayout コールバックは、Context または Context オブジェクトを入力として取得します。この入力から、PPGLayout または PPGLayout オブジェクトを取得することができます。PPGLayout または PPGLayout オブジェクトは、コントロールを追加およびグループ化するメソッドを提供します。
// JScript code generated by the wizard function MyProperty_DefineLayout( ctxt ) { var oLayout,oItem; oLayout = ctxt.Source; oLayout.Clear(); oLayout.AddTab(" Plug-in Info"); oLayout.AddGroup(" "); oLayout.AddItem("Property_Name", "Property Name"); oLayout.AddItem("Author"); oLayout.AddItem("Script_Language"); oLayout.AddItem("Add_to_Menu"); oLayout.EndGroup(); oLayout.AddTab("Add Parameter"); oLayout.AddItem("ParamType"); return true; }
通常は、Softimage セッションごとに一度ずつ DefineLayout コールバックが呼び出されます。ただし、PPG.Refresh メソッドまたは XSIUtils.Reload メソッドの Refresh コマンドを使用して、強制的に DefineLayout を再び呼び出すこともできます。また、プロパティ ページのヘッダ バーを右クリックし、[更新]を選択して、プロパティ ページを更新することもできます。
レイアウトを定義する前には常に PPGLayout.Clear または PPGLayout::Clear を呼び出す必要があります。呼び出さない場合、DefineLayout が呼び出されるたびに既存のレイアウトに新しいコントロールのセットが追加されます。
C++ プロパティおよび C# プロパティは、あらゆるプロパティ ページ イベントを、OnClicked を使用して扱います。
OnClicked が起動されるのは、プロパティ ページが開いたとき、パラメータ値が変更されたとき、またはユーザがボタンまたはタブをクリックしたときです。
OnClicked コールバックは、PPGEventContext または PPGEventContext オブジェクトを入力値として取得します。これにより、イベント ID (プロパティ ページのロード、パラメータの変更、ボタンのクリック、タブの選択などのうち、どのイベントが起動されたかを判別する)およびエフェクトコントロール(存在する場合)へのアクセスが可能になります。
スクリプト プロパティは、プロパティ ページがロードされたときに、PPGEvent を使用して応答します。
PPGEvent コールバックには、ロードを行う前にプロパティ ページを初期化するために実行するコードを含めることができます。たとえば、特定のパラメータの値によってレイアウトに含まれるコントロールが決定する場合、DefineLayout ではなく PPGEvent でレイアウトを定義しておきます。
スクリプト プロパティは、OnChanged を使用してパラメータ値への変更を処理します。
パラメータの値を変更するたびに、そのパラメータ用の OnChanged イベントが起動されます。これらのイベントをトラップして使用すれば、さまざまなタスクを実行できます。 たとえば、新しい値を有効にする場合もあります。
次の規則を使用するコールバックの内部に、ハンドラ コードを実装できます。
function <prefix-name>_<parameter-name>_OnChanged() {
// Implement the handler here
}
スクリプト プロパティは、OnClicked を使用してボタン イベントを処理します。
各コマンド ボタンは、独自の OnClicked コールバックでボタンにコードを関連付けます。次の規則を使用するコールバックの内部に、ハンドラを記述する必要があります。
function <prefix-name>_<button-name>_OnClicked()
{
// Implement the handler here
}
ここで、<button-name>は AddButton の呼び出しで指定された名前です。この名前に含まれるスペースは削除されます。
既定では、プラグイン ベースのカスタム プロパティはカスタム プロパティの名前をプリフィックスとして使用します。一方、ランタイムおよび SPDL ベースのカスタム プロパティは既定でプリフィックスを使用しません。詳細については、「カスタム プロパティとともにプリフィックスを使用する」を参照してください。
スクリプト プロパティは、OnTab を使用してタブイベントを処理します。
ユーザがタブをクリックすると、OnTab コールバックが起動します。次の規則を使用するコールバックの内部に、ハンドラを記述する必要があります。
function <prefix-name>_<tab-label>_OnTab()
{
// Implement the handler here
}
ここで、<tab-label>は PPGLayout.AddTab または PPGLayout::AddTab の呼び出しで指定されたラベルです。このラベルに含まれるスペースは削除されます。
既定では、プラグイン ベースのカスタム プロパティはカスタム プロパティの名前をプリフィックスとして使用します。一方、ランタイムおよび SPDL ベースのカスタム プロパティは既定でプリフィックスを使用しません。詳細については、「カスタム プロパティとともにプリフィックスを使用する」を参照してください。
次のイベントは GridData オブジェクト用です。
function <property_name>_<parameter_name>_OnBeginValueChange() { // Implement the handler here }
function <property_name>_<parameter_name>_OnEndValueChange() { // Implement the handler here }
function <property_name>_<parameter_name>_OnBeginSelectionChange() { // Implement the handler here }
function <property_name>_<parameter_name>_OnEndSelectionChange() { // Implement the handler here }
function <property_name>_<parameter_name>_OnButtonClicked() { // Implement the handler here }
function <property_name>_<parameter_name>_OnHeaderDoubleClick() { // Implement the handler here }
function <property_name>_<parameter_name>_OnContextMenuInit() { // Implement the handler here }
function <property_name>_<parameter_name>_OnContextMenuSelected() { // Implement the handler here }
詳細については、GridData のサンプルを参照してください。このサンプルは、Softimage SDK のインストール フォルダにある examples フォルダにあります。