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、項目は メニュースロットへ。

画面と編集の流れ

Blender 5.2 / PME 2.1 の開発環境。「My Help Menu」の設定例。
  1. 名前と基本操作

  2. Extend Target

  3. Advanced settings

  4. Keymap / Hotkey

  5. メニュースロット

名前と利用条件、呼び出し方を設定し、スロットでメニューの内容を組み立てます。

名前と基本操作

My Help Menu の 名前と基本操作。メニュー名と有効状態を確認し、プレビューや詳細設定を開きます。
名前と基本操作。値はこの例の設定です。

有効状態、プレビュー、選択メニュー、名前、タグ、ドキュメント、詳細設定の操作です。各ボタンは 選択メニューの設定を参照してください。

Keymap / Hotkey

My Help Menu の Keymap / Hotkey。独立して呼び出す場合の場所とキーを指定します。この例はキー未割り当てです。
Keymap / Hotkey。値はこの例の設定です。

使う場所を Keymap、起動キーと修飾キーを Hotkey で設定します。Open Mode は開くタイミングです。入力欄は 共通の Hotkey 設定を参照してください。

Extend Target

My Help Menu の Extend Target。既存メニューへの差し込み先と位置、順序を設定します。この例は Help メニューの末尾です。
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 モードからも取得できます。

メニュースロット

A:下にスロットを追加。B:右に列を追加。

スロットは各列の上から順にメニュー項目として並びます。増やす方向に応じて、次の2つを使い分けます。

  • A. 下の Add Slot — スロットを追加:その列の末尾に新しい項目を追加します。同じ列の操作を縦に増やすときに使います。

  • B. 右端の + — 列を追加(Add Column):現在の最後の列の右に、新しい列を追加します。例えば左に選択ツール、右に変形ツールを置くように、項目を横に分けて整理できます。追加した列も、下の Add Slot で項目を増やします。

  • 並び順がそのままメニューの表示順になります。

  • スロットの追加・削除・並び替えが可能です。

  • 個別スロットの有効化/無効化は、無効化されたスロットがメニューから取り除かれた状態で表示されます。

  • スロットタイプを未設定(空スロット)にすると、メニュー上で区切り線として描画されます。

  • サブメニューは、Menu スロットで別のメニューを参照することで構成します。

Advanced settings

My Help Menu の Advanced settings。説明、利用条件、タイトルの表示を設定します。
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 DialogExpand Popup Dialogで表示

  • Regular MenuOpen 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・手順を扱う参考動画です。

Menu Editor