Sticky Key Editor

Sticky Key は、キーを押したときと離したときに、それぞれ指定した処理を実行するエディターです。値の保存と復元を組み合わせると、押している間だけ別の状態にできます。On Press / On Release の固定 2 スロット構成で、押下解放のペアとして動作します。

このページは PME 2.1 の設定を対象にしています。

構成ガイド — 機能・組み合わせ・活用例(AI 向け)

呼び名:Sticky Key/種別 ID:STICKY 押下と解放に別々の処理を割り当てる機能です。「押している間だけ別の状態」は、その二つの処理を組み合わせて作ります。

  • 入力:On Press / On Release の固定2スロット。Command または Hotkey を設定します。スロットへ。

  • 制約:並び替え、追加、削除、個別無効化はありません。解放側の処理を設定しなければ、自動で元の状態へ戻るわけではありません。

  • 値を一時変更する:一つのプロパティ代入なら Save and Restore Previous Value で保存・復元コードを生成します。保存する値は実行時に読みます。

  • 組み合わせ:常用ツールと一時ツールの切り替え、3D Viewport の表示切り替えに使います。処理全体を待たせたい用途では Block UI の意味と呼び出し元を確認します。

  • 実行条件:押下と解放の両方で参照する対象が有効であること、起動キーの解放を受け取れることを確認します。別のエリア・モードへ移動する運用を含めるなら、その場合の復元対象も決めます。

  • 確認:最初の値を変えてから押下・解放を繰り返し、固定値への切り替えではなく元の値に戻ることを確認します。活用例へ。

  • 変数の共有期間:一回の押下から解放まで、Command 間で保存値を共有します。変数の共有と復元へ。

画面と編集の流れ

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

  2. Advanced settings

  3. Keymap / Hotkey

  4. 押下と解放のスロット

一覧で編集対象を選び、名前と有効状態を確認して、呼び出し方とスロットを設定します。 共通の一覧・検索・タグは エディターの共通要素、 各部は 名前キー設定スロット詳細設定を参照してください。

名前と基本操作

Axis Mirror の 名前と基本操作。キーの押下と解放に割り当てる設定全体の名前を確認します。
名前と基本操作。値はこの例の設定です。

名前と有効状態で編集対象を確認します。タグ・名前変更・参照元などの操作は 選択メニューの設定 を参照してください。 この種別にはメニューのプレビューボタンはありません。

Keymap / Hotkey

Axis Mirror の Keymap / Hotkey。使う場所と保持するキーを指定します。この例は Pose の T キーです。
Keymap / Hotkey。値はこの例の設定です。

呼び出す場所とキーを設定します。入力欄の操作は 共通の Hotkey 設定 を参照してください。

Sticky Key は押された瞬間と離した瞬間の両方を受け取って動作します。Ctrl / Alt / Shift 単独や OS レベルの予約キーは、プラットフォームや Blender の Keymap 優先順位の影響を受ける場合があります。詳細は キーマップの選び方 を参照してください。

スロット

Axis Mirror の 押下と解放のスロット。上が押したとき、下が離したときの処理です。この例はミラー設定の True / False です。
押下と解放のスロット。値はこの例の設定です。

Sticky Key は固定 2 スロットで、それぞれの役割は決まっています。

順序

スロット

役割

1

On Press

押した瞬間に走る処理(一時状態への切り替え)

2

On Release

離した瞬間に走る処理(元の状態への復帰)

スロットの並び替え・追加・削除・無効化はできません。

Save and Restore Previous Value

On Press に一つのプロパティ代入を設定すると、スロットの編集で保存・復元コードを生成できます。たとえば 3D Viewport の床グリッドを一時的に隠すなら、次の代入を使います。

C.space_data.overlay.show_floor = False

ボタンを使うと、On Press と On Release の内容を次の形に書き換えます。

入力先

生成される処理

On Press

実行時の現在値を value に保存してから指定値を代入する

On Release

保存した value を同じパスへ代入する

保存するのはボタンを押して編集した時点の値ではなく、Sticky Key を実際に押した時点の値です。 既存の On Release の処理も置き換わるため、独自処理を設定済みの場合は生成後の両スロットを確認します。 パスは両方のタイミングで有効である必要があります。この例は C.space_data が 3D Viewport の状態で使います。

押したときに覚え、離したときに戻す

キーを押している間だけ床グリッドを隠す。 On Press で覚えた値を、On Release から使えます。

        flowchart LR
    A["押す<br/>元の状態を覚える"] --> B["押している間<br/>グリッドを隠す"]
    B --> C["離す<br/>元の状態へ戻す"]
    classDef remember fill:#e8f1fb,stroke:#4878aa,color:#172b43;
    classDef restore fill:#e8f5ed,stroke:#45805d,color:#183f28;
    class A,B remember;
    class C restore;
    

① On Press の Command — 元の状態を覚えてから隠す

view = C.space_data; start_floor = view.overlay.show_floor; view.overlay.show_floor = False

② On Release の Command — 同じビューへ元の状態を戻す

view.overlay.show_floor = start_floor

Keymap を 3D View にして、透視投影の 3D ビューで押して離します。最初から非表示だった場合は、離した後も非表示です。

viewstart_floor は自分で付けた名前です。start_floorbanana でも構いませんが、覚える側と戻す側で同じ名前を使います。 Save and Restore が自動生成する value も、この変数共有を使っています。

次の独立した呼び出しや別のメニューへ値を渡す場合は、一時的な共有メモ U(User Data) を使えます。

共有範囲と復元の条件

  • 共有期間:On Press と On Release の Command は同じ Python 名前空間を使います。継続中の Sticky Key がない状態から新しく開始すると作り直され、前回の値を引き継ぎません。

  • 復元先:この例は view に起動元の 3D ビューを覚えます。そのビューが操作中に残っていることが前提です。Save and Restore の生成コードは、解放時にも同じプロパティパスを評価するため、途中で対象を変える場合は復元先の参照も覚える必要があります。

  • 名前:PME が提供する CE などを保存先として上書きしません。

  • 復元:On Release は任意の失敗に対する finally ではありません。On Press の return_value で継続せず終了すると通常の解放待ちに入りません。保存前のエラー・復元コードのエラー・処理の中断まで補う自動復元はありません。

Advanced settings(詳細設定)

Axis Mirror の Advanced settings。説明、利用条件、保持中の UI ブロックを設定します。
Advanced settings。値はこの例の設定です。

歯車から開きます。Description と Poll は 共通の詳細設定 を参照してください。

Block UI:

Sticky Key の継続中、他のツールへ入力を渡さないための設定です。既定は OFF。画面の描画を止める設定ではありません。


コードと入力欄

この種別で使える入力は冒頭の構成ガイドを参照してください。入力欄の操作は 共通のスロットエディタ、コードは 書き方と入力制限コード例にまとめています。


活用例と確認する条件

ブラシやアクティブツールを一時的に切り替える

On Press で現在のブラシやツールを保存して切り替え、On Release で保存した対象へ戻す構成です。 ツールの切り替えには Blender の bpy.ops.wm.tool_set_by_id()、現在のツールの確認には C.workspace.tools.from_space_view3d_mode(C.mode) が使われます。 取得結果がない状態、対象モードが変わった場合、ツール ID がそのモードにない場合の処理も決めます。

ブラシは Blender のバージョンによってアセットの扱いが異なります。旧版の paint_settings().brush = D.brushes["Draw"] という例は、同名のブラシがあり、代入可能な版・モードでのパターンです。 現在の環境に無条件で貼り付けず、ブラシの取得・有効化方法を先に確認してください。 値の一時共有は U の例、外部スクリプトの使い方は 外部ファイルを実行する にまとめています。

ビューポートオーバーレイの一時切り替え

On Press スロットに次のコードを書き、Save and Restore を押します。On Release への復元コードは自動挿入されます。

C.space_data.overlay.show_floor = False

シェーディングモードの一時切り替え

C.space_data.shading.type = 'WIREFRAME'

Save and Restore で On Release に元のシェーディングへ戻すコードが挿入されます。


参考動画(原作者のチャンネル)

roaoao の動画一覧より。旧版の UI・手順を扱う参考動画です。

Sticky Key Editor for Blender
Nested Pie Menu, Confirm Threshold and Sticky Keys