Stack Key Editor¶
Stack Key は、一つのホットキーで複数の処理を使い分けるエディターです。押すたびに次へ進む使い方と、前回の処理を再使用しながら連打で候補を変える使い方を選べます。1スロットだけにして、短いコードにホットキーを割り当てることもできます。
このページは PME 2.1 の設定を対象にしています。
構成ガイド — 機能・組み合わせ・活用例(AI 向け)
呼び名:Stack Key/種別 ID:SCRIPT。
一つのキーで複数の候補を順に使い分ける機能です。一度の呼び出しで連続処理を完了する Macro Operator とは異なります。
入力:Command または Hotkey のスロット。一つから始め、必要に応じて追加・削除・並び替えできます。通常の巡回では有効な項目を使います。
順序:上から下へ進み、最後の次は先頭です。スロットへ。
継続の条件:Remember Slot、Advance On、Repeat Timeout を先に決めます。詳細設定へ。
制約:コードを入れる場合は 入力上限と実行するエディター・モード・対象を確認します。記憶するのはスロット位置で、Blender のデータを保存する機能ではありません。
組み合わせ:各 Command から Macro を呼べば、候補ごとに連続処理を持てます。メニューを名前で呼ぶ例は 活用例へ。
設計例:通常は前回のツールを再使用し、素早く押したときだけ候補を変えるなら Remember Slot + Quick Repeat。押すたび必ず候補を変えるなら Every Press。
確認:最初の押下、連打、間隔を空けた押下、別操作を挟んだ押下を分けて試します。Undo Previous Command は履歴への影響も確認します。
変数の共有期間:同じ巡回を続けている間の Command 間で共有します。スロット位置の記憶とは別です。変数の共有とリセット条件へ。
画面と編集の流れ¶
1名前と基本操作候補をまとめる設定の名前と有効状態を確認します。
2Advanced settings前回の候補を記憶するか、どのタイミングで次へ進むかを設定します。
3Keymap / Hotkey使う場所とキーを指定します。この例は Q キーです。
4巡回するスロット上から順に使う候補を並べます。この例は3種類の選択ツールです。
一覧で編集対象を選び、名前と有効状態を確認して、呼び出し方とスロットを設定します。 共通の一覧・検索・タグは エディターの共通要素、 各部は 名前、キー設定、 スロット、詳細設定を参照してください。
名前と基本操作¶
名前と有効状態で編集対象を確認します。タグ・名前変更・参照元などの操作は 選択メニューの設定 を参照してください。 この種別にはメニューのプレビューボタンはありません。
Keymap / Hotkey¶
呼び出す場所とキーを設定します。入力欄の操作は 共通の Hotkey 設定 を参照してください。
スロット¶
通常の巡回では、有効なスロットを上から順に使います。Every Press では押下ごとに進み、Quick Repeat では短時間の続け押しで進みます。最後まで進むと先頭に戻ります。
スロットの追加・削除・並び替えが可能です。
個別スロットの有効化/無効化ができます。
各スロットには表示名が付き、ビューポート上部のヒントテキストにこの名前が表示されます。
Added in version 2.0.5: スロットごとにアイコンを設定できるようになりました。スロットを呼び出したときの通知にも、スロット名とアイコンが表示されます。
Advanced settings(詳細設定)¶
歯車から開きます。Description と Poll は 共通の詳細設定 を参照してください。
- Remember Slot:
直前に実行したスロット位置を記憶します。無効の場合は、別の Stack Key や Blender オペレーターの実行などで連続操作が途切れると先頭から再開します。クリックなどの入力すべてを「別の操作」として判定するわけではありません。
バージョン 2.0.5 で変更: 従来の Remember State を Remember Slot に整理しました。
- Advance On:
Remember Slot 有効時に、次のスロットへ進むタイミングを選びます。
Every Press — 押すたびに次のスロットへ進みます。
Quick Repeat — 短時間に続けて押したときだけ次へ進み、間隔が空いた押下では現在のスロットを再実行します。
Added in version 2.0.5: Advance On を追加しました。既存の Stack Key 設定は Every Press 相当の動作を保ちます。
- Repeat Timeout:
Advance On が Quick Repeat のときに使う、「連続押し」と認める時間のしきい値(ミリ秒)。最小値は 1 ms、既定値は 600 ms。
- Undo Previous Command:
連続して候補を切り替える際、前の結果を取り消して次のスロットを実行するための設定です。最初の呼び出しやスロットを明示した呼び出しなどでは同じように Undo しません。複数の変更を一つにまとめる機能ではないため、実際の操作と Undo 履歴で結果を確認してください。
ビューポート上部のヒントテキスト¶
通常の巡回では、現在のスロット名とアイコンを通知で確認できます。有効なスロットが一つだけの構成や、スロットを明示して呼ぶ経路では、巡回用の通知は表示されません。
コードと入力欄¶
この種別で使える入力は冒頭の構成ガイドを参照してください。入力欄の操作は 共通のスロットエディタ、コードは 書き方と入力制限、 コード例にまとめています。
活用例と確認する条件¶
2 つのワークスペースを巡回する¶
Layout と Scripting というワークスペースが存在する環境の例です。名前を変更している場合は実際の名前に合わせます。
スロット 1:
C.window.workspace = D.workspaces['Layout']
スロット 2:
C.window.workspace = D.workspaces['Scripting']
1 スロットだけの「hotkey 付き Python コード」¶
任意の Python コードや open_menu() 呼び出しを 1 つのスロットに書き、Stack Key の hotkey に割り当てます。
open_menu("My Pie Menu")
ブラシ切り替えにも応用できますが、ブラシアセットの扱いは Blender の版とペイントモードで異なります。旧版の D.brushes 代入例を使う前に、現在のブラシ切り替え API と対象を確認してください。
修飾キーに応じてスロットを呼び分ける¶
スロットに名前を付けると、外部からスロット名を指定して呼び出せます。event_mods(E) は現在のイベントから "" / "Ctrl" / "Shift" / "Ctrl Shift" のような文字列を返すヘルパーで、スロット名と一致させることで修飾キー別に処理を切り替えられます。
open_menu("My Stack Key", event_mods(E))
この例は入力イベント E が渡される呼び出しで使います。イベントがない評価にそのまま移さず、対応するスロット名が実在することも確認してください。
コンテキストに応じてスロットを切り替える¶
open_menu("My Stack Key", "Command 1") if C.mode == 'OBJECT' else open_menu("My Stack Key", "Command 2")
直前の操作を Undo してから別パラメータで再実行¶
次は Mesh の Edit Mode で、領域選択に使うループを選択済みの場合の例です。選択状態と Undo を含めて確認してください。
Undo Previous Command を有効にすると、直前の結果を巻き戻してから次のスロットを試せます。
スロット 1:
bpy.ops.mesh.loop_to_region(select_bigger=False)
スロット 2:
bpy.ops.mesh.loop_to_region(select_bigger=True)
参考動画(原作者のチャンネル)¶
roaoao の動画一覧より。旧版の UI・手順を扱う参考動画です。