[2.8]既存のメニューとかパネルとかをショートカットキーで
本日の一曲。
…じゃなかった、BlenderのGrease Pencil で、マテリアル切り替えを(ヘッダーのメニューでなく)ショートカットキー経由で、というお題をいただきましたので。
「何したいのか整理」
Grease Pencil のペン先の情報はヘッダー部分からアクセス出来て、マテリアルについてもここから切り替えます。
プロパティエディタ経由でも出来たりするんですけど、ここではその部分には触れません。
このメニューをこうできればいいのかな、という感じで。ショートカットキーを押すとマテリアルを選択するパネルが表示されます。
では「何も知らない体で」やっていきましょう。
ショートカットまたはボタンでパネルが出てくるものはありますか?
同じタイプのオブジェクト(Grease Pencil)、同じモード(今回はDrawモード)で、「パネルが出てくる」という動作をしているものがないか確認します。同種の動きをするものがあればそれを真似てしまえばいいですね。
右クリックするとマウスカーソル位置にパネルが出てきました。こんな感じで「何かキーを押すとマテリアル選択するパネルが出てくる」というのを想定します。
ここまでくれば「具体的にどうすればいいか」の組み立てができます。
・ ショートカットでパネルを出す仕組みを特定する(調査)
・ メニューからパネルを出している箇所を特定する(調査)
・ (調査結果から)カスタマイズ用に組み合わせる
そんな都合良く行くのものなのか?…今回はうまくいきました😄うまくいかない場合にはAdd-onを書くコースですね。
ショートカットでパネルを出す仕組みを特定する
では、先ほどの「右クリックでパネルが出る」というところから。
Preference > Keymap のショートカットキー検索を[Key-Binding]にして、検索窓に"RMB"と入力します。RMBは「マウスの右ボタン(Right Mouse Button)」のこと。
"Grease Pencil"で始まる項目を確認します。必要に応じてPreferences画面の幅を広げておきます。
なんとなく雰囲気で"Grease Pencil Stroke Paint Mode"だろうということで特定します。
「wm.call_panel」で「VIEW3D_PT_gpencil_draw_context_menu」という名前の何かを呼び出している、そういう感じですね。
これを流用するような感じですね。
メニューからパネルを出している箇所を特定する
3Dビューのヘッダーをよく観察しておきましょう。
実はこのヘッダーのレイアウト、Pythonスクリプトで書かれていて、Blenderのインストールされたフォルダを探すと出てきます。
うちのMacの場合、ここにありました。
/Applications/Blender283/Blender.app/Contents/Resources/2.83/scripts/startup/bl_ui/space_view3d.py
ここからはテキストエディタが必要になってきます。用意しておきましょう。VSCodeあたりが無難かな?
とりあえず「右クリックで出すパネル」の設定に書かれていた名前"VIEW3D_PT_gpencil_draw_context_menu"をGrepすれば3Dビューのメニューとかの定義されているところにたどり着くんじゃね?って感じで。
そして space_view3d.py を開いてざっと眺めます。出したいパネルはマテリアルなので"material"なんてついてないかな?とか探してみると… "TOPBAR_PT_gpencil_materials"っていうのがありました。定義されている箇所からしてもそれっぽい。
ということで調査ひとまずここで終わり。次はショートカットキーの設定です。
カスタマイズ用に組み合わせる
これまで得られた情報をもとに、カスタマイズしてみます。Preferences > Keymapから。 検索欄は空であることを確認します。
Grease Pencil > Grease Pencil Stroke Paint Mode に新規のショートカットキーを設定します。
スクロールダウンして、[+Add New]ボタンをクリックします。
1行増えました。三角をクリックして設定詳細を表示させます。
"none"の右の三角をクリックして設定詳細を表示させます。その下の入力欄に"wm.call_panel"とと入力して[Enter]。入力が終わると Name: の入力欄が追加されます。
次に、Name:のところに"TOPBAR_PT_gpencil_materials"と入力して[Enter]。
次に"A"と書かれているボタンを押し、押した後に[M]キーを押してショートカットキーとして登録します。マテリアルなので[M]で。
はい、これでOK。
では3Dビューに戻って [M] キーを押してみましょう。
少し使ってみて、ほかのモードでもこのショートカットキー設定を使いたい場合には、そのモードでショートカットキーの設定をしてあげれば良いです。設定できれば。
終わりに
既存のメニューで使えるのであればそれを使うようにしておくのが良いです。カスタマイズと開発は別物ですね。
なので今回の変更を共有したい場合には、設定したBlender上でキーコンフィグのエクスポートをして .py ファイルを他のパソコンに転送、キーコンフィグをインポートすれば同じカスタマイズを反映可能です。
後、気をつけるべきは「機能名や定義名は画面の表示とは異なる」ということだけは注意しましょう。だいたい推測できるような名前が付いてはいますが、ズバリそのもの、というわけではないので。
See Also:
ショートカットキーでメニューとかパネルでなくオペレーターを開きたい、という場合には以下の記事が参考になります。
お読みいただきありがとうございます。サポートいただいた分はおやつのグレードアップに使おうかと思います。スキ、SNSにシェアもよろしくお願いします!