カスタム ディスプレイ ホストのコンポーネント

 
 
 

このセクションは、次のトピックから構成されています。

コンテキストの表示: インタフェースを初期化および描画する

Softimage において何らかの変更が発生するたびに、カスタム ディスプレイ ホストは ViewContext オブジェクトを使用して、カスタム ディスプレイに通知を出します。 この ViewContext オブジェクトは、カスタム ディスプレイが初期化されるときにも使用可能です。

以下のサンプルでは、カスタム ディスプレイによって Win32 ダイアログが作成され、ViewContext.GetParentWindowHandle の呼び出しを使用して Softimage ウィンドウの子として関連付けています。 先に述べたように、通知の時点で ViewContext オブジェクトを受け取ります。 ViewContext を使用すると、関連する通知情報を検索できます。 このクラスの詳細については、「C++ API リファレンス」の「ViewContext」を参照してください。

ViewContext クラスは、最上位レベルの Windows ハンドル(hWnd)へのアクセスを可能にする関数(GetParentWindowHandle)を含んでいます。

Windows で初期化する

以下の例では、カスタム ディスプレイを初期化して、Windows ハンドルを取得しています。 この例では、ViewContext で指定された Windows ハンドルの子として、ダイアログが作成されます。

LRESULT	CCustomUI::Init( XSI::CRef& in_pViewCtx )
{
	XSI::ViewContext l_vViewContext = in_pViewCtx;
	l_hWnd = CreateDialog(  __gInstance ,  MAKEINTRESOURCE(IDD_CUSTOMUI_EXAMPLE), (HWND)l_vViewContext.GetParentWindowHandle(), (DLGPROC)_view_proc);

	return S_OK;
}

また、通知データ(GetNotificationData)も ViewContext で取得されます。

LRESULT CCustomUI::Notify ( XSI::CRef& in_pViewCtx )
{
	using namespace XSI;

	// Convert the CRef into a ViewContext

	XSI::ViewContext l_vViewContext = in_pViewCtx;

	// Retrieve the notification information from the view context
	
	XSI::siEventID in_eNotifcation;
	void*	in_pData;

	l_vViewContext.GetNotificationData ( in_eNotifcation, &in_pData );

Linux で初期化する

次の例は、Motif でカスタム ディスプレイを正常に初期化する方法を示したものです。

void XWindowExample_Init (XSI::CRef in_pViewCtx)
{
// Get the view context object
XSI::ViewContext l_vViewContext = in_pViewCtx; 

// Ask Softimage for the Top Level Widget
Widget g_TopLevel = (Widget)l_vViewContext.GetTopLevelWidget(); 

// Initialize our Widget from class 
XtInitializeWidgetClass ( xmFormWidgetClass ); 

// Create a form widget and parent it to the Top Level Widget Softimage has provided
g_MyWindow = XtVaCreateManagedWidget ( "main_form",
			xmFormWidgetClass,
			g_TopLevel,
				XmNwidth, 300,
			XmNheight, 300,
		NULL ); 

// Create a button and parent it to the form
g_theWidget = XtVaCreateManagedWidget("main_button",
			xmPushButtonWidgetClass,
			g_MyWindow,
			XmNlabelString, XmStringCreate ("Push Me", XmSTRING_DEFAULT_CHARSET),
			NULL ); 

// Create a second button and parent it to the form
g_theWidget2 = XtVaCreateManagedWidget("main_button2",
			xmPushButtonWidgetClass,
			g_MyWindow,
			XmNx,100,
			XmNy,100,
			XmNlabelString, XmStringCreate ("Dont Push Me", XmSTRING_DEFAULT_CHARSET),
			NULL );

XtSetMappedWhenManaged(g_TopLevel, 0); 

// Add callback functions
XtAddEventHandler( g_theWidget, ButtonPressMask, FALSE, ButtonCB, NULL );
XtAddEventHandler( g_theWidget2, ButtonPressMask, FALSE, ButtonCB2, NULL ); 

XtRealizeWidget(g_TopLevel); 

// This will register our form class (our shell object) with Softimage Custom Display
// Architecture. It is VERY IMPORTANT that this is done at the end of the
// initialization and after the widgets have been Realized.
// 
// Internally, this will start the Xt main loop and will start broadcasting 
// messages
l_vViewContext.SetXWindowTopLevel ( (void*)XtWindowOfObject(g_MyWindow) );
}

通知の表示

カスタム ディスプレイが初期化さると、以下の複数のクラスを使用して Softimage シーン内の変更を通知できます。

カスタム ディスプレイ ホスト専用に定義されるクラスおよび関数の詳細については、「C++ API クラス リファレンス」を参照してください。

コールバック

カスタム ディスプレイでは、Softimage に正常に接続して .dll をプラグイン レジスタに登録するために、5 つのコールバックを定義する必要があります。

このセクションは、次のトピックから構成されています。

カスタム ビュー コールバック

Init

プラグインが初めて初期化されるときに、Softimage によって呼び出されます。 このコールバックは必須です。

void			MyPluginName_Init (XSI::CRef in_pViewCtx)

Term

プラグインが停止すると(最上位レベル ウィンドウが破壊されると)、Softimage によって呼び出されます。 このコールバックは必須です。

void			MyPluginName_Term (XSI::CRef in_pViewCtx)

Notify

Softimage シーン内で、パラメータの変更や選択内容の変更などが発生した場合に呼び出されます。 このコールバックは必須ではありません。

void			MyPluginName_Notify	( XSI::CRef in_pViewCtx )

プラグイン レジスタ コールバック

カスタム ディスプレイでは、Softimage の自己インストール プラグイン メカニズムが利用されています。 これらのコールバックの簡単な説明を以下に示します。 自己インストール プラグインの詳細については、「カスタマイズのビルドとデプロイ」を参照してください。

カスタム ディスプレイ ホストを登録および定義する

カスタム ディスプレイ ホストを登録し(XSILoadPlugin)、自己インストール項目として定義する(RegisterCustomView)方法を、次に示します。

XSI::CStatus XSILoadPlugin( XSI::PluginRegistrar& in_reg )
{
	in_reg.PutAuthor( L"SoftimageUser" );
		in_reg.PutName( L"MyPluginName" );
	in_reg.PutVersion( 1, 0 );

	in_reg.RegisterCustomView( L"MyPluginName" );

	return XSI::CStatus::OK;

カスタム ディスプレイ ホストをアップロードする

Softimage では、プラグインをアンロードしたときに独自のメンテナンス ルーチンを実行しますが、ユーザ独自のアクティビティ(メッセージ ログへの書き込み、使用メモリの解放、使用済み SDK オブジェクトのリリースなど)を追加することもできます。

XSI::CStatus XSIUnloadPlugin( const XSI::PluginRegistrar& in_reg )
{
	return XSI::CStatus::OK;
}

Softimage でのカスタム ディスプレイ ホスト アプリケーションのロード

ビューポート

ビューポートが定義されると、Softimage ではビューポート メニューにメニュー エントリ項目が自動的に作成されます。

フローティング ウィンドウ

フローティング ウィンドウを表示するには、[アプリケーション](Application)[ビュー](Views)[カスタム ディスプレイ ホスト]を選択します。

フローティング ウィンドウが表示されます。 右クリックして、コンテキスト メニューから選択します。