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 AddCommandItem AddItem 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