Regular Menu Editor¶
Regular Menu は、項目を縦に並べたドロップダウン型のメニューを作成するエディターです。Blender のドロップダウンメニューやコンテキストメニューと同じ形式で動作します。
構成ガイド — 機能・組み合わせ・活用例(AI 向け)
呼び名:Regular Menu/種別 ID:RMENU。 項目を縦に並べ、必要に応じて列や区切りで整理するメニューです。スロット数は可変。Command / Property / Menu / Hotkey / Custom を使えます。
割り当て:Command は実行する Python、Property は RNA パスによるウィジェット、Custom は Blender の
UILayoutを使う描画コードです。Hotkey は実行時のキー割り当てからオペレーターを呼びます。Menu の組み合わせ:別のメニューを開く、Property / Property Stack をスイッチとして配置する、Regular Menu を展開するなど、参照先とオプションで意味が変わります。
配置:ホットキーから呼ぶ/既存 Blender メニューへ差し込む/Pie Menu や Popup Dialog の中へ展開する。差し込み先のクラスと、実行時のエディター・モードを確認します。
用途:名前を見て選ぶ操作一覧、種類ごとに列を分けたツールメニュー。方向操作が必要なら Pie Menu / Vector Menu を検討します。
展開は 他メニューとの組み合わせ、差し込みは Extend Target、項目は メニュースロットへ。
画面と編集の流れ¶
1名前と基本操作メニュー名と有効状態を確認し、プレビューや詳細設定を開きます。
2Extend Target既存メニューへの差し込み先と位置、順序を設定します。この例は Help メニューの末尾です。
3Advanced settings説明、利用条件、タイトルの表示を設定します。
4Keymap / Hotkey独立して呼び出す場合の場所とキーを指定します。この例はキー未割り当てです。
5メニュースロット項目を縦に並べ、見出しや区切りで整理します。
名前と利用条件、呼び出し方を設定し、スロットでメニューの内容を組み立てます。
名前と基本操作¶
有効状態、プレビュー、選択メニュー、名前、タグ、ドキュメント、詳細設定の操作です。各ボタンは 選択メニューの設定を参照してください。
Keymap / Hotkey¶
使う場所を Keymap、起動キーと修飾キーを Hotkey で設定します。Open Mode は開くタイミングです。入力欄は 共通の Hotkey 設定を参照してください。
Extend Target¶
トップバー直下にあり、Blender の既存メニューへこの Regular Menu を差し込むための行です。
Added in version 2.0.0: Extend Target に対して複数の Pop-up Dialog / Regular Menu を重ねられるようになりました。
- Extend Target:
差し込み先の Blender メニュークラス ID。
VIEW3D_MT_objectのような文字列を入れます。未指定の場合は差し込みは行われません。- Side:
差し込み位置。▲ は対象メニューの先頭、▼ は末尾を指します。
- Order:
同じ Target に複数のメニューが差し込まれている場合の表示順。値が小さいほど先に並びます。
差し込み先 ID は Interactive Panels モードからも取得できます。
メニュースロット¶
スロットは各列の上から順にメニュー項目として並びます。増やす方向に応じて、次の2つを使い分けます。
A. 下の Add Slot — スロットを追加:その列の末尾に新しい項目を追加します。同じ列の操作を縦に増やすときに使います。
B. 右端の + — 列を追加(Add Column):現在の最後の列の右に、新しい列を追加します。例えば左に選択ツール、右に変形ツールを置くように、項目を横に分けて整理できます。追加した列も、下の Add Slot で項目を増やします。
並び順がそのままメニューの表示順になります。
スロットの追加・削除・並び替えが可能です。
個別スロットの有効化/無効化は、無効化されたスロットがメニューから取り除かれた状態で表示されます。
スロットタイプを未設定(空スロット)にすると、メニュー上で区切り線として描画されます。
サブメニューは、Menu スロットで別のメニューを参照することで構成します。
Advanced settings¶
Description と Poll は、説明文と利用条件の設定です。Python による動的な説明も使えます。共通の 詳細設定を参照してください。
- タイトル表示:
メニュー上部にメニュー名を見出しとして描画するかを切り替えます。
他メニューとの組み合わせ¶
Added in version 2.1: Regular Menu を Pie Menu / Popup Dialog / Regular Menu の中へ展開できます。
呼び出す側の Menu タブで Regular Menu を指定し、Expand Regular Menu を ON にすると中身が展開されます。OFF の場合は、選択して開くメニューとして使います。 Open on Mouse Over と表示される他の配置先とは区別してください。
Blender の既存メニューを配置する場合も、プルダウンにするか、中身を展開するかを選べます。PME で作った Regular Menu の参照と、Blender のメニュークラスの指定を混同しないでください。
スロットエディタ¶
項目を実行したときに評価する Python コードを設定します。 オペレーターを呼び出す場合は、実行するエディター・モード・選択状態に対応した処理を使います。
# 3D Viewport の Object Mode で立方体を追加する
bpy.ops.mesh.primitive_cube_add()
コマンドの記述方法
入力上限は UTF-8 で 1,024 バイトです。日本語を含む場合、1,024 文字より短くなります。
短い単純文は ; で区切れますが、インデントを持つブロックを機械的に 1 行へ変換しないでください。
長さの確認と外部スクリプトへの分割は Command / Custom のコードと入力制限 を参照してください。
グローバル変数
利用可能なグローバル変数の例:
C: PME がスクリプトに提供するコンテキストO: bpy.ops(Blenderのオペレーター)E: event(イベント情報)
Scripting Reference でグローバル変数の説明を確認できます。
オブジェクトのプロパティへのパスを指定し、ウィジェットとして表示します。
例:bpy.context.object.locationでオブジェクトの位置を表示・編集できます。
高度なプロパティ操作
インデックス指定やより複雑なプロパティ操作が必要な場合は、Property Editorを利用してください。
ボタンがクリックされた時にPME内で作成した他のメニューアイテムを呼び出します。 例:
Popup Dialogを
Expand Popup Dialogで表示Regular Menuを
Open on Mouse Overで表示Macro Operatorを実行
ボタンがクリックされた時に、指定されたBlenderのホットキーに割り当てられているオペレーターを検索して実行します。
例:GでGrab(移動)、RでRotate(回転)など、Blenderの標準ホットキーを利用できます。
UI を描画するときに評価する Python コードを設定します。
L はレイアウトオブジェクトで、Blender のレイアウト API を使って UI を構築できます。
再描画でも実行されるため、オブジェクトの追加・削除などの処理を直接書かず、
その処理を実行するボタンを配置します。
# ボックス内にラベルを表示
L.box().label(text="メッシュを追加")
# 複数のボタンを縦に配置
col = L.column(); col.operator("mesh.primitive_cube_add", text="立方体"); col.operator("mesh.primitive_uv_sphere_add", text="球")
上は独立した二つの例です。Pie Menu の 1 スロットに複数の UI 要素を置く場合は、 二つ目の例のように、一つの column や box の中にまとめてください。 パイのレイアウト直下へ複数の要素を追加すると、後続スロットの方向がずれる原因になります。
入力上限は UTF-8 で 1,024 バイトです。 Command / Custom のコードと入力制限 で、 長さ、複数行、外部スクリプトの扱いを確認できます。
応用的な使い方¶
Pie Menu の中へ展開する¶
Pie Menu のスロットから Regular Menu を開くと、放射状 + リストのハイブリッド UI を構成できます。Pie Menu のスロットエディタで Menu タブを選び、リンク先に Regular Menu を指定します。同じスロットの Expand Regular Menu を ON にすると中身を Pie 内に配置し、OFF にすると選択して開くサブメニューになります。
動的なドロップダウン / 列挙¶
Custom スロットの 1 行で、Blender の prop_menu_enum などをそのまま流し込めます。列挙型プロパティを Regular Menu の形で出す典型形です。
L.prop_menu_enum(C.object, "display_type")
draw_menu() で別レイアウトに描く¶
open_menu() が「Regular Menu を新しいポップアップとして開く」のに対し、draw_menu() は 現在の layout にその Regular Menu の中身を描画する ヘルパーです。Pop-up Dialog や Panel Group の中で Regular Menu を再利用するときに使います。
draw_menu("Regular Menu Name")
Stack Key / Macro Operator の呼び出し口¶
Regular Menu に Stack Key や Macro Operator をリストとして並べると、コマンド一覧として使えます。並べ方は 2 通りあり、動作経路が異なります。
Menu スロットで直接参照 — Stack Key / Macro を Menu スロットの参照先に指定。Macro の場合、Blender の Adjust Last Operation(F9)パネルから引数を再調整できる経路を維持します。
Command スロットから
open_menu()で呼び出し —open_menu("名前")を Command スロットで実行。条件分岐をはさんで呼ぶメニューを切り替えるなど、コード側で制御したい場合に使います。
open_menu("My Macro Operator")
Extend Menu の重ね合わせ¶
Added in version 2.0.0: 同じ Extend Target に対して、Poll で出し分けながら複数の Regular Menu を重ねられるようになりました。
Extend Target / Side / Order の詳細と Interactive Panels からの追加手順は Interactive Panels と Extend Panel を参照してください。
参考動画(原作者のチャンネル)¶
roaoao の動画一覧より。旧版の UI・手順を扱う参考動画です。