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 | 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 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);
}
} |