Object Hierarchy | 関連する C++クラス:Menu
メニュー
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 | AddCommandItem | AddItem | AddSeparatorItem |
AddSubMenu | IsClassOf | IsEqualTo | SetBackgroundColor |
Application | Callback | Categories | Checked |
Command | Enabled | Filter | FullName |
Help | Name | NestedObjects | Origin |
OriginPath | Parent | Style | Type |
//------------------------------------------------------------------- // 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÷", "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); } } |