自己インストール プラグインを記述する場合、プラグイン項目をいくつか含んだ単一ファイルがすでに提供されている可能性があります(詳細については、「Self-Installing Plug-ins」を参照してください)。ただし、プラグインを自己インストール式にできない場合、またはそうしたくない場合でも、いくつかの項目を 1 つのファイルに提供することができます。
たとえば、複数のカスタム コマンドにボタンをリンクしたツールバーを作成することに決めて、それらのカスタム コマンドをすべて同一ライブラリ ファイルに格納します。 または、選択されたオブジェクトに適用されるカスタム オペレータおよびコマンドを、1 つのファイルに格納します。
カスタマイズ項目(たとえば、カスタム オペレータ、カスタム コマンド、カスタム イベント)ごとに、別のコールバックを使用します。 たとえば、XSIOnCommandCPPコールバックを使ってカスタム コマンドを実装し、XSIOnEventCPP でカスタム イベントを実装する一方で、カスタム オペレータに対しては Update 関数、Init 関数、および Term 関数を使用して、エントリ ポイントおよび追加の入出力引数としてコンテキストへの参照を取ります。
各タイプのエレメントをそれぞれ 1 つずつファイルで提供している場合は、Softimage では使用されているコールバックに基づいてエレメントが既に区別されています。 ただし、複数のタイプ(たとえば、2 つのコマンドおよび 1 つのオペレータ)を 1 ファイルの中に使用している場合は、それらのタイプを明示的に区別する必要があります。
コマンドまたはイベントの名前は常にコールバック関数に渡されるため、メイン コールバック内のスイッチ メカニズムを使用して、名前をチェックしてから適切な関数を呼び出すことができます。
たとえば、1 つのファイル内でいくつかのイベントを管理するには、次のような構造を使用できます。
/* ==================================================================== Main event callback */ XSI::Status XSIOnEventCPP( long in_eventID, XSI::CValueArray& in_args ) { switch (in_eventID) { case OnBeginSceneOpen: HandleOpenScene( in_args ); break; case OnBeginSceneNew: HandleNewScene( in_args ); break; ... }; return CStatus::OK; } /* -------------------------------------------------------------------- Handler for OnBeginSceneOpen */ XSI::Status HandleOpenScene( XSI::CValueArray& in_args ) { // Handler implementation ... } /* -------------------------------------------------------------------- Handler for OnBeginSceneOpen */ XSI::Status HandleNewScene( XSI::CValueArray& in_args ) { // Handler implementation ... }