Menu

Object Hierarchy | 関連する C++クラス:Menu

継承

SIObject

UIObject

MenuItem

メニュー

導入

v4.0

詳細

Menuオブジェクトは、カスタムメニューの作成の基本的な部分をサポートします。カスタム メニューでは、次の操作を行うことができます。

- エンドユーザがメニューを開いたときに、オン デマンドでコールバック機能を使用してメニューを作成します。

- Softimage メニュー(「ホスティングメニュー」と呼ばれることもあります)にカスタムメニューを追加します。ホスティングメニューには、個々の Softimageビュー内に表示される標準的なメニューや、コンテキストメニューを使用できます。

- 動的なメニューまたは静的なメニューとしてメニューを作成します。動的なメニューはメニューを開くたびに再構築され、静的なメニューは一度だけ構築されます。

- サブメニューとして表示したり、ホスティングメニュー内の項目のフラットリストの 1 つとして表示したりします。

- カスタムメニューのアンカーポイントです。全リストについては、siMenuAnchorPointsを参照してください。

- 同じカスタムメニューを複数のビューで共有します。アンカーポイントと表示オプションを個々に設定すると、同じメニューを別のビューに登録できます。Softimage 内のカスタムメニューのコードを最大限に再利用できます。

カスタムメニューは自己インストールのプラグインで、プラグインファイルを Application¥Plugins フォルダにドロップすることによって Softimage に実装されます。Script Editor からスクリプトを実行する方法ではカスタムメニューを作成できません。メニュープラグインを実装する必要があります。このため、PluginRegistrar.RegisterMenuを使用して起動時にカスタムメニューを登録する必要があります。この登録関数ではカスタムメニューがメモリ内に明示的にロードされるわけではなく、ユーザのリクエストを受けたときにのみメニューがロードされます。自己インストール項目の実装の詳細については、「Registering Plug-in Items」を参照してください。

メニューを構築してメニュー項目を追加するには、コールバック関数を実装する必要があります。コールバック関数は、ユーザがメニューを開いたときに softimage によって呼び出されます。関数名には必ず{plug-in_item_name}_Init というフォーマットを使用します。ここでplug-in_item_name は、PluginRegistrar.RegisterMenuに渡され、メニュープラグイン項目を識別する文字列です。詳細については、Definition Callbacks for Menus を参照してください。

注:Softimage では関数の戻り値は必要ありません。

メソッド

AddCallbackItem AddCallbackItem2 AddCommandItem AddCommandItem2
AddItem AddItem2 AddSeparatorItem AddSubMenu
IsClassOfオペレータ IsEqualToオペレータ SetBackgroundColor  
       

プロパティ

Application Callback Categories Checked
Command Enabled Filter FullNameオペレータ
Help Nameオペレータ NestedObjects Origin
OriginPath Parent Style Typeオペレータ

JScript の例

//-------------------------------------------------------------------

// JScript implementation example of a custom menu plug-in.

//

// README: Copy and paste the example into the script editor 

// and run (F5).

//

// The menu will install itself into the modelling toolbar

// in the modify deform section.

//-------------------------------------------------------------------

// This function is required to register the menu in Softimage

function XSILoadPlugin( in_reg )

{

	// register plug-in information

	in_reg.Author = "Softimage Corp.";

	in_reg.Name = "Menu Example";

	// var the version number of this plug-in

	in_reg.Major = 1;

	in_reg.Minor = 0;

	// install a dynamic custom menu in the spatial section in the deform menu (model toolbar)

	in_reg.RegisterMenu( siMenuTbDeformSpatialID, "MenuExample", true, true );

	return true;

}

// This is the callbackfunction used for building the menu. Since the menu is

// dynamic, thefunction is called each time the menu opens.

function MenuExample_Init( in_ctxt )	

{

	// retrieve the menu object to build 

	var menu = in_ctxt.Source;

	// var the menu caption

	menu.Name = "&Custom Deform";

	// attach the Twist command to the first menu item

	menu.AddCommandItem( "&Twist", "Twist" );

	// adds a separator	

	menu.AddSeparatorItem();

	// adds other menu items and attach afunction callback

	var item = menu.AddItem( "Custom &1", siMenuItem );

	item.Callback = "OnMenuItem";

	menu.AddCallbackItem( "Custom &2", "OnMenuItem" );

	menu.AddCallbackItem( "Custom &3", "OnMenuItem" );

	menu.AddSeparatorItem();

	var submenu = menu.AddSubMenu( "&function menu" );

	submenu.AddCommandItem( "Sub&divide", "Subdivide" );

	// var the submenu menu with a polygon filter, the menu will be enabled only 

	// if polygons are selected.

	submenu.Filter = "Polygon";

	return true;

}

// This callbackfunction is called by Softimage when the menu item 1 or 2 are 

// selected

function OnMenuItem( in_ctxt )

{

	var menuitem = in_ctxt.source;

	LogMessage( menuitem.name + ":" + menuitem.callback );

}

//--------------------------------------------------------------------

// Code to bootstrap example into system

//--------------------------------------------------------------------

function ExampleSourceCode()

{

	return "// XSISDK Doc Example\n" +	

		MenuExample_Init.toString() + "\n" + 

		OnMenuItem.toString() + "\n" + 

		XSILoadPlugin.toString();

}

// if we are running from script editor save code to 

// examples addon folder in the user's directory.

if (GetUserPref("ScriptingSessionActive"))

{

	var ex_name 		= "ExMenu";

	var ex_subfolder 	= "Plugins";

	var ex_folder 		= "XSISDKDocExamples";

	var ex_langsuffix	= ".js";

	CreateAddonDirectories( InstallationPath(siUserPath), ex_folder );

	var fso = XSIFactory.CreateActiveXObject("Scripting.FileSystemObject");

	var filename = XSIUtils.BuildPath( 

		InstallationPath(siUserAddonPath), 

		ex_folder,

		"Application",

		ex_subfolder,

		ex_name+ex_langsuffix );

	if (!fso.FileExists(filename))

	{

		var f = fso.CreateTextFile ( filename );

		f.write( ExampleSourceCode() );

		f.close();

		Application.LoadPlugin(filename);	

	}

}

関連項目

MenuItem Definition Callbacks for Menus Simple Menu plug-in example