C# による Softimage プラグインのビルド

 
 
 

Softimage のすべての C# プラグインは、Softimage オブジェクト モデルで使用できる自己インストール カスタム プラグイン項目を定義します。 このプラグイン項目には、コマンド、イベント、フィルタ、メニュー、オペレータ、プロパティなどがあります。 カスタム ディスプレイおよび GraphicSequencer のプラグイン項目は、C++ API に実装されるだけであるため、C# では使用できません。

ヒント:

このセクションにのサンプル コードはいずれかの Softimage プラグイン ウィザードによって自動生成されたものです。プラグインのセットアップにはウィザードを使用することをお勧めします。 詳細については、「C# プラグインを作成する」を参照してください。

プラグインの登録

Softimage に接続するには、XSIOM(オブジェクト モデル)アセンブリを加えてから、Softimage でプラグインを登録するためのクラス(以下の例の XSIPlugin)を作成します。各プラグイン項目はそれぞれのクラス内で定義されており、プラグイン項目を登録するにはプラグイン項目クラスの名前を使用します。

using System;
using System.Reflection;
using XSIOM; // Softimage Object model assembly

public class XSIPlugin
{
	public bool Load( PluginRegistrar in_reg )
	{
		in_reg.Author = "Kilroy";
		in_reg.Name = "MyCSharpPlugin";
		in_reg.Major = 1;
		in_reg.Minor = 0;

		in_reg.RegisterCommand( "MyCSharpCmd", null );
		in_reg.RegisterMenu( siMenuAnchorPoints.siMenuMainTopLevelID, "MyCSharpMenu", false, false );
		in_reg.RegisterProperty( "MyCSharpCustomProp" );
		in_reg.RegisterEvent( "MyCSharpSelectionEvent", siEventID.siOnSelectionChange );
		in_reg.RegisterFilter( "MyCSharpTriangleFilter", siFilterType.siFilterSubComponentPolygon );
		in_reg.RegisterOperator( "SplatterCS" );
		in_reg.RegisterCommand( "DotNETHost", null );
		return true;
	}

	public bool UnLoad( PluginRegistrar in_reg )
	{
		return true;
	}
}
重要:

Load メソッドが終了したら、Softimage のプラグインを登録するために使用したクラス(上記の例の XSIPlugin)は破棄されます。 これは、登録処理が終了するとプラグインが Softimage によってアンロードされるため、故意に行われる処理です。 Softimage プラグインの一般的な情報については、「自己インストール プラグイン」を参照してください。

プラグイン項目を定義する

プラグイン項目クラス定義は、コールバックを(C++ API でのように、読み込まれた関数コールバックとしてではなく)public メソッドとして実装する必要があります。

public class MyCSharpCmd
{
	public MyCSharpCmd()
	{
	}

	// Command mandatory implementation
	public bool Init( Context in_ctxt )
	{
		// ...
	}

	public bool Execute( Context in_ctxt )
	{
		// ...
	}

	// etc.
}

C++ API でのプラグイン開発に慣れているユーザのために、次の表に C# スタイルから C++ API スタイルへのマッピングを示します。

作成するプラグイン項目

コメント

作成する C# Public メソッド

C++ コールバック関数

カスタム コマンド

クラスを実装します(MyCSharpCmd など)

MyCSharpCmd.Init
MyCSharpCmd.Execute

MyCSharpCmd_Init

MyCSharpCmd_Execute 

カスタム イベント

クラスを実装します(MyCSharpSelectionEvent など)

MyCSharpSelectionEvent.OnEvent

カスタム フィルタ

クラスを実装します(MyCSharpTriangleFilter など)

MyCSharpTriangleFilter.Match 
MyCSharpTriangleFilter.Subset 
MyCSharpTriangleFilter.IsApplicable

標準メニューとコンテキスト メニュー

クラスを実装します(MyCSharpMenu など)。

Menu.AddCallbackItem の呼び出しを含むメニュー クラスでメソッドを定義してコールバックを追加します。

MyCSharpMenu.Init 
MyCSharpMenu.<menu-item_callback_name>

カスタム オペレータ

クラスを実装します(SplatterCS など)

SplatterCS.Update 
SplatterCS.Init 
SplatterCS.Define 
SplatterCS.DefineLayout 
SplatterCS.PPGEvent

カスタム プロパティ

クラスを実装します(MyCSharpCustomProp など)。

C# のプロパティ ページでのロジック処理は、Softimage オブジェクト モデルを使用するスクリプト言語ではなく、C++ API でのロジックの処理方法を反映しています。 詳細については、「PPGEventContext」の説明を参照してください。

MyCSharpCustomProp.Define 
MyCSharpCustomProp.DefineLayout 
MyCSharpCustomProp.PPGEvent
注:

カスタムディスプレイ(ビュー)コールバックとGraphicSequencerコールバックはオブジェクトモデルに実装されていないため、C#言語での開発では使用できません。