Blenderの3DViewで呼び出せるスペシャルメニューに、任意のメニューを追加するアドオンを作る方法を説明します。
上は、オブジェクトモードのスペシャルメニューにカメラ設定メニューを追加した画像です。この程度なら、ごく簡単なスクリプトで済みます。
bl_info = {
"name": "Cameras Specials",
"author": "suwatoh",
"version": (1, 0, 0),
"blender": (2, 77, 0),
"location": "View3D > Specials",
"description": "Prepend cameras to the specials menu",
"warning": "",
"wiki_url": "",
"category": "3D View",
}
import bpy
def menu_func(self, context):
self.layout.menu("VIEW3D_MT_view_cameras")
def register():
bpy.types.VIEW3D_MT_object_specials.prepend(menu_func)
def unregister():
bpy.types.VIEW3D_MT_object_specials.remove(menu_func)
if __name__ == "__main__":
register()
スクリプトの説明をします。まず、下のほうから。
def register():
bpy.types.VIEW3D_MT_object_specials.prepend(menu_func)
def unregister():
bpy.types.VIEW3D_MT_object_specials.remove(menu_func)
これはregisterという関数とunregisterという関数を定義しています。registerはアドオンを有効化するときにBlenderから呼び出される関数です。unregisterはアドオンを無効化するときにBlenderから呼び出される関数です。スクリプトの最後にif __name__ == "__main__":
register()
と書いておくと、Blenderのテキストエディターからもスクリプトを実行できます。アドオンを試行するのに便利なので、たいていのアドオンはこのように書いています。if文の下の行を「unregister()」と書き換えて実行すると、アドオンを無効化するのと同じになります。話をregister関数に戻します。「bpy.types.VIEW3D_MT_object_specials」というのが出てきますが、これがオブジェクトモードのスペシャルメニューを表しています。
メニュー関連には共通してappend・prepend・removeというメソッドが使えるようになっています。appendはメニューの最後に新たな項目を追加します。prependはメニューの先頭に新たな項目を追加します。removeはメニューに追加した項目を削除します。いずれも、メニューを指定する関数を引数とする必要があります。上の例では「menu_func」を指定しています。その定義はすぐ上のほうにあります。
def menu_func(self, context):
self.layout.menu("VIEW3D_MT_view_cameras")
メニューを指定する関数は、必ず、2つの引数を受けとるように定義しなければなりません。第1引数のselfは、Pythonのインスタンスメソッドのお約束で、ここにはメニューへの参照が渡されます。第2引数のcontextには、Blender上の様々な要素にアクセスするための参照が渡されます。「self.layout」は、ここではオブジェクトモードのスペシャルメニューのlayout属性となります。Blenderのメニュー要素には、layout属性を通して、表示に関する様々な機能にアクセスすることが出来るようになっています。
menuメソッドはその名の通り、追加するメニュー項目を指定するもので、上の例では「VIEW3D_MT_view_cameras」を指定しています。これはビューメニューのサブメニュー・カメラ設定を指しています。
ここまでの説明で、「bpy.types.VIEW3D_MT_object_specials」と「VIEW3D_MT_view_cameras」の部分を書き換えると、メニューをいろいろ変更できることがわかると思います。
他のスペシャルメニューは、次のようになっています。
- bpy.types.VIEW3D_MT_edit_mesh_specials … メッシュ編集モード
- bpy.types.VIEW3D_MT_armature_specials … アーマチュア編集モード
- bpy.types.VIEW3D_MT_pose_specials … ポーズモード
ウィンドウレイアウトをScriptingに変更し、テキストエディタの左上にある「+」をクリックしてツールシェルフを表示すると、API Navigatorパネルが見つかります。3DView上のメニュー関連は「bpy.types.VIEW3D_MT」で始まる慣例があるので、下図のようにフィルタをかけると探しやすくなります。

スクリプトの先頭の「bl_info」は、ユーザー設定に表示される内容を指定します。その次の「import bpy」は、「bpy」で始まる名前のものをスクリプトで利用可能にするための文です。これを冒頭部分に書かないと、「bpy」を書いた行でスクリプトの処理がエラーになってしまいます。
説明は以上です。