MAXScript には、メニュー マネージャとメニュー作成システムへのフル アクセスがあります。
この API を使用する場合には、任意のスクリプトを実行する前に、「..\UI\MaxStartUI.mnu」ファイルのコピーを作成する必要があります。問題が発生した場合は、バックアップ バージョンを MaxMenu.mnu にコピーしてしてください。
公開されている MAXScript へのインタフェースには、メニュー マネージャ、メニュー オブジェクト、クアッド メニュー オブジェクト、およびメニュー項目の 4 つがあります。
指定された名前の新しいメニュー ファイルをロードします。現在の「UI」ディレクトリでファイルを検索します。成功した場合は true、失敗した場合は false を返します。
指定された名前で新しいメニュー ファイルを保存します。現在の「UI」ディレクトリにファイルを保存します。
変更内容を反映してメイン メニュー バーを更新します。必ず、メイン メニュー バーに対して変更を行った後で呼び出してください。
この呼び出しは、メニュー エクステンションを登録する場合に使用されます。「contextId」は、ランダムな 32 ビットの整数です。この値は「genclassid()」を使用して生成できます。エクステンションは、この関数によってメニュー マネージャに登録され、永続的に記憶されます。初めてエクステンションが登録された場合は true、その後は登録のたびに false を返します。このエクステンションは MaxMenu.mnu ファイルに保存されるため、セッション間でスティッキーです。エクステンションは、スクリプトで項目やサブメニューを MAX のメイン メニュー バーおよびクアッド メニューに追加できるようにするために使用されます。正しい使い方については、以下のサンプル スクリプトを参照してください。
この関数は、指定された名前のメニューを返します。指定された名前のメニューがメニュー マネージャに存在しない場合は「undefined」を返します。この関数には、名前の中の「&」文字を含むメニューの完全な名前が必要です。
「findMenu」と同様に機能しますが、メニューではなくクアッド メニューを取得します。
警告: このメソッドを使用する場合は十分に注意してください。 |
サブメニューとして使用されているメニュー、クアッド メニュー内のメニュー、またはメイン メニュー バーのメニューを登録解除すると、3ds Max が破壊されます。 |
このメソッドは「unregisterMenu」と同じように動作しますが、クアッド メニュー用です。
新しい空のクアッド メニューを作成します。これには 4 つの空のメニュー(各クアッド メニューに 1 つずつ)が含まれます。
メニューに追加可能な新しいサブメニュー項目を作成します。指定された「name」を使用して、指定されたサブメニューを表示します。
メニューに追加可能な新しいメニュー項目を作成します。メニュー項目は、指定された名前とカテゴリ付きのマクロ スクリプトを実行するアクションです。指定された名前とカテゴリ付きのマクロ スクリプトがない場合は、「undefined」を返します。
ビューポートの右クリック メニューを指定されたクアッド メニューに設定します。「which」の値は次のうちいずれかです。
#nonePressed #shiftPressed #altPressed #controlPressed #shiftAndAltPressed #shiftAndControlPressed #controlAndAltPressed #shiftAndAltAndControlPressed
以下の例では、既定値の(キーが押されていない)クアッド メニュー「Modeling 2」を設定しています。メニュー名は、クアッド カスタマイズダイアログ ボックスに表示されるクアッド メニューでなければなりません。メニュー名は、[クアッド カスタマイズ](Quads customization)ダイアログ ボックスに表示されるクアッド メニューでなければなりません。また、メニュー名は大文字を含めて正確に一致する必要があります。 menuMan.SetViewportRightClickMenu は、ビューポートの右クリック メニューを許可されていないメニューに設定しようとすると、FALSE を返します。
ビューポートの右クリックに使用するクアッド メニューを取得します。「which」パラメータは次のうちいずれかです。
#nonePressed #shiftPressed #altPressed #controlPressed #shiftAndAltPressed #shiftAndControlPressed #controlAndAltPressed #shiftAndAltAndControlPressed menuMan.getMainMenuBar()
MAX のメイン メニュー バーとして使用されているメニューを返します。
MAX のメイン メニュー バーとして使用されているメニューを設定します。結果を表示するには、「menuMan.updateMenuBar()」を呼び出す必要があります。
指定されたクアッド メニューの「すべての四角を表示」の設定を取得します。
指定されたクアッド メニューに「すべての四角を表示」フラグを設定します。「value」は true または false です。
メニュー マネージャに登録されているメニューの総数を返します。
メニュー マネージャのインデックス番目のメニューを取得します。インデックスの基数は 1 です。
メニュー マネージャに登録されているクアッド メニューの総数を返します。
メニュー マネージャのインデックス番目のクアッド メニューを取得します。インデックスの基数は 1 です。
クアッド メニュー オブジェクトでは、次の関数を使用できます。
メニューの 4 つのクアッドに関連付けられているメニュー オブジェクトを取得します。「quadIndex」は 0、1、2、または 3 の値をとることができます。0 が右下のクアッドで、そこから反時計回りに番号が付けられています。
クアッド メニューを表示します。「showAllQuads」が true の場合、すべてのクアッドが同時に表示されます。クアッド メニューは、現在のカーソルの位置に表示されます。
メニューはメニュー項目のコンテナです。 メニューには次の関数があります。
メニュー項目は、区切り、サブメニュー、または macroScript に接続するアクションです。menuItem には、次の関数を使用できます。
値が true の場合は、macroScript に関連付けられている項目がメニューに表示されるときに項目タイトルを使用します。それ以外の場合は、マクロの名前または macroScript の「buttontext」を使用します。
この関数は、サブメニュー項目に使用します。値が true の場合、サブメニューをカスケード サブメニューとしてではなく、インラインで表示します。
項目が区切りの場合は true、それ以外の場合は false を返します。
項目がサブメニュー項目の場合は、サブメニューに関連するメニューを返します。
次の例は、menuMan インタフェースを使ってメニュー エクステンションを登録する方法を示すスクリプトです。このスクリプトは、stdplugs¥stdscripts フォルダに配置する必要があります。
例: |
-- This example adds a new entry to MAX's main "Help" menu. -- Register a menu context. This returns true the first time it -- is registered, and we can add things to the menu. If -- it returns false, then the context is already registered, -- and the items are already in the menu. -- The number 0x246c6dbe is random, and can be generated genClassID() 関数 を使用して生成します。 if menuMan.registerMenuContext 0x246c6dbe then ( -- Get the main menu bar local mainMenuBar = menuMan.getMainMenuBar() -- The help menu is always the last menu. local helpMenuIndex = mainMenuBar.numItems() -- Get the menu item that holds the help menu local helpMenuItem = mainMenuBar.getItem(helpMenuIndex) -- Get the menu from the item local helpMenu = helpMenuItem.getSubMenu() -- create a menu separator item local sepItem = menuMan.createSeparatorItem() -- create a menu items that calls the sample macroScript local testItem = menuMan.createActionItem "MyTest" "Menu Test" -- Add the separator to the end of the help menu. -- the position of -1 means add it to the end. helpMenu.addItem sepItem -1 -- Add the action item to the end of the help menu. helpMenu.addItem testItem -1 -- redraw the menu bar with the new item menuMan.updateMenuBar() ) |
2 つの右クリック メニューを設定およびリセットする 2 つの macroScript です。