1 つのライブ ラリファイル(.DLL/SO)に複数のハンドラをバンドル

 
 
 

自己インストール プラグインを作成する場合、プラグイン項目をいくつか含んだ単一ファイルがすでに提供されている可能性があります(詳細については、「自己インストール プラグイン」を参照)。ただし、プラグインを自己インストール式にできない場合、またはそうしたくない場合でも、いくつかの項目を 1 つのファイルに提供することができます。

たとえば、複数のカスタム コマンドにボタンをリンクしたツールバーを作成することに決めて、それらのカスタム コマンドをすべて同一ライブラリ ファイルに格納します。 または、選択されたオブジェクトに適用されるカスタム オペレータおよびコマンドを、1 つのファイルに格納します。

重要:

自己インストール プラグインと v1.0 のプラグインを同じ実装ファイル内に混在させないでください。 xsiaddon ファイルでは両方の種類のプラグインを一緒にパッケージ化できるため、2 つのプラグインが混在するツールを簡単に配布できます。ただし、以下の条件があります。

  • 各プラグイン モジュールは、自己インストール プラグイン項目のみを含む。

  • 各 v1.0(自己インストール以外)プラグインの実装ファイルは、v1.0 対応の実装のみを含む(たとえば、MyCustomCommand_InitMyCustomCommand_Executeコールバックの代わりに XSIOnCommandCPP コールバックを含む)。

数種類のカスタマイズを提供する方法

カスタマイズ項目(たとえば、カスタム オペレータ、カスタム コマンド、カスタム イベント)ごとに、別のコールバックを使用します。 たとえば、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
	...
}