MRが楽しい

MRやVRについて学習したことを書き残す

Blender2.8でPythonスクリプトの自作アドオンを利用する

本日は Blender2.8 の python 利用の技術調査枠です。
Blender2.8でPythonスクリプトの自作アドオンを利用する方法を記事にします。
f:id:bluebirdofoz:20191111093624j:plain

サンプルアドオン

前回の記事で作成した「Hello World Panel」を表示するスクリプトをアドオンとして登録してみます。
bluebirdofoz.hatenablog.com

アドオンとして登録するため、スクリプトコードに bl_info の設定を追加しました。
・HelloWorldAdOn.py

import bpy

# bl_infoの設定
bl_info = {
  "name": "HelloWorldAddOn",             # プラグイン名
  "description": "HelloWorld AddOn",     # 説明文
  "author": "holomon",                   # 制作者名
  "version": (1, 0, 0, 0),               # バージョン
  "blender": (2, 80, 0),                 # 動作可能なBlenderバージョン
  "support": "TESTING",                  # サポートレベル
  "category": "3D View",                 # カテゴリ名
  "location": "",                        # 機能の位置付け
  "warning": "",                         # 注意点やバグ情報
  "wiki_url": "",                        # ドキュメントURL
  "tracker_url": ""                      # サポートサイトURL
}

# HelloWorldPanelクラスの作成
class HELLOWORLDPANEL_PT_ui(bpy.types.Panel):
    bl_label = "Hello World Panel"
    bl_idname = "OBJECT_PT_hello"
    bl_space_type = "VIEW_3D"
    bl_region_type = "UI"
    bl_category = "AddPanel"

# 描画の定義
    def draw(self, context):
        self.layout.operator("hello.button")

class HELLOWORLDPANEL_OT_button(bpy.types.Operator):
    bl_label = "text"
    bl_idname = "hello.button"

    def execute(self, context):
        print("pushed")
        return{'FINISHED'}


# 登録対象のクラス名
regist_classes = (
    HELLOWORLDPANEL_PT_ui,
    HELLOWORLDPANEL_OT_button
)


# HelloWorldPanelの登録
def register():
    for regist_cls in regist_classes:
        bpy.utils.register_class(regist_cls)

# HelloWorldPanelの解除
def unregister():
    for regist_cls in regist_classes:
        bpy.utils.unregister_class(regist_cls)

# 実行例:[HelloWorldPanelの登録]を実施
if __name__ == "__main__":
    register()

bl_info はプラグインに関する情報の定義です。
この定義を追加することで、Blender が対象のスクリプトをアドオンとして認識できるようになります。
各定義の意味合いはスクリプト中のコメントの通りです。
f:id:bluebirdofoz:20191111094646j:plain

アドオンのインストール

作成した HelloWorldAdOn.py をアドオンとしてインストールします。
Blender を起動し、メニューから 編集 -> プリファレンス を開きます。
f:id:bluebirdofoz:20191111094656j:plain

Blenderプリファレンスダイアログが開くので[アドオン]タブを開きます。
[インストール]ボタンをクリックします。
f:id:bluebirdofoz:20191111094706j:plain

ファイル読み込みの画面が開きます。
作成したアドオンスクリプトを指定して[ファイルからアドオンをインストール]をクリックします。
f:id:bluebirdofoz:20191111094716j:plain

これでアドオンが参照用ディレクトリにコピーされます。
f:id:bluebirdofoz:20191111094725j:plain

アドオンがコピーされる参照用ディレクトリのパスは OS によって異なります。

WindowsC:\Users\(ユーザ名)\AppData\Roaming\Blender Foundation\Blender\(Blenderのバージョン)\scripts\addons
Mac/Users/(ユーザ名)/Library/Application Support/Blender/(Blenderのバージョン)/scripts/addons
Linux/home/(ユーザ名)/.config/blender/(Blenderのバージョン)/scripts/addons

アドオンの有効化

次に参照可能なアドオンを有効化する必要があります。
今回のアドオンはサポートレベルを[テスト中(TESTING)]に設定したので、サポートレベルの[テスト中]を有効化します。
f:id:bluebirdofoz:20191111094736j:plain

するとアドオンの一覧に HelloWorldAdOn.py のアドオンが表示されました。
これのチェックボックスをチェックして、アドオンを有効化します。
f:id:bluebirdofoz:20191111094745j:plain

これでアドオンが有効化されました。
[3Dビュー]のサイドバーを確認すると「Hello World Panel」パネルが追加されています。
f:id:bluebirdofoz:20191111094756j:plain

プリファレンスの設定を保存しておけば、再度 Blender を開きなおしたときにもアドオンが有効化されるようになります。
f:id:bluebirdofoz:20191111094804j:plain

アドオンを登録する際の注意点

Blender2.8 では継承するクラスによって、クラス名の命名規則が定められています。

[A-Z][A-Z0-9_]*_(継承クラスごとの識別子)_[A-Za-z0-9_]+

継承クラスごとの識別子は以下の通りです。

bpy.types.OperatorOT
bpy.types.PanelPT
bpy.types.HeaderHT
bpy.types.MENUMT
bpy.types.UIListUL

バージョン 2.8.0 の現在では命名規則に従わない場合でも登録は可能です。
将来的には制約がかかるようなので、クラス名を設定する際は留意します。