LoginSignup
8
3

More than 1 year has passed since last update.

Blenderのアドオン作成のメモ

Last updated at Posted at 2022-05-28

概要

Blenderのアドオンを作るときのメモです。

関連リンク

前提

  • 作成するアドオンは、GitHubで管理します。
  • Pythonコードは、Visual Studio Code(以降VS Code)で編集します。
  • WatchAddonアドオンを使って、アドオンファイルを保存すると機能が自動で有効になるようにします。

手順

WatchAddonをBlenderにインストールする

WatchAddonアドオンをインストールしておきます。アドオンを有効化するには、テスト中を選ぶ必要があります。
このアドオンをインストールすると、インストール済みの特定のアドオンを直積編集して保存すると自動で有効化されます。
これにより、開発中のアドオンのコードを変更し保存するだけで、開発中のアドオンの機能を確認できるようになります。

作りたいものを決める

作成したいものを考えます。ここでは、「Blenderで開いている外部テキストを、VS Codeで開く機能」とします。コードで書くと以下になります。

        for text in bpy.data.texts:
            if text.filepath:
                pth = Path(text.filepath)
                Popen(f"code {pth.name}", shell=True, cwd=pth.parent)

実行方法は、Scriptingワークスペースのテキストメニューとします。
アドオンの名前は、OpenTextFileにします。

元にするものを決める

作成済みのリポジトリーから機能が似ているものを探し、コピー元にします。なければ、空で作ります。
今回作成するものはメニューなので、メニューのアドオンのOpenURLを元にします。
これ以外にも、パネルを使うものであれば、DiffObjを元にできます。

  • OpenURLのCodeから、クローン用のURLをコピーします。
  • GitHubのページの右上の+Import repositoryを選びます。[リンク]
  • コピーしたURLを下記のように貼り付け、新しいリポジトリ名をOpenTextFileにし、Begin importを押します。
  • 下記のようになったら、OpenTextFileのリンクをクリックします。

コピーしたアドオンを簡単に修正しインストールする

作成したOpenTextFileリポジトリのクローン用のURLをコピーします。
ここからコンソールで作業をします。

git clone コピーしたURL
cd OpenTextFile
code .

アドオン名、クラス名などは、はじめに正しいものに変えておきます。そこで、VS Codeで下記を修正します。

  • 全ファイルのOpenURLOpenTextFileに一括変換します。
  • __init__.pybl_infoを修正します。
  • core.pyCOU_OT_open_urlCOT_OT_open_text_fileに変更します。
  • 同ファイルのCOU_OT_add_urlクラスを削除します。
  • 同ファイルのbpy.types.VIEW3D_MT_objectbpy.types.TEXT_MT_textに一括変換します。
  • 同ファイルのbl_idnameの行は、下記のように修正します。
    bl_idname = "object.open_text_file"
  • 修正箇所を確認してからコミットし、変更の同期をします。
  • GitHubのOpenTextFileリポジトリに戻り、README.mdのInstallationのDownloadのリンクをクリックし、アドオンをダウンロードします。
  • ダウンロードしたzipファイルは解凍せずに、そのままBlenderでアドオンとしてインストールします。今回、アドオンをTESTINGで作成しているので、下記のように、テスト中を選択してチェックします。
  • Scriptingワークスペースのテキストメニューに、下記のようにOpen URLが追加されます。

アドオンを完成させる

3Dビューポートのサイドバーの編集タブで下記のようにWatchAddonのaddonにOpenTextFileを指定します。

上図のStartを押します。インストールされたアドオンのディレクトリがVS Codeで開きます。
core.pyを下記のようにアドオンを完成させます。

core.py
from subprocess import run

import bpy

from .register_class import _get_cls


class COT_OT_open_text_file(bpy.types.Operator):
    bl_idname = "object.open_text_file"
    bl_label = "Open Text File"
    bl_description = "Open the file of bpy.data.texts."

    def execute(self, context):
        for text in bpy.data.texts:
            if s := text.filepath:
                run(["code", s])
        return {"FINISHED"}


# 自動的にこのモジュールのクラスを設定
ui_classes = _get_cls(__name__)


def draw_item(self, context):
    """メニューの登録と削除用"""
    for ui_class in ui_classes:
        self.layout.operator(ui_class.bl_idname)


def register():
    """追加登録用(クラス登録は、register_class内で実行)"""
    bpy.types.TEXT_MT_text.append(draw_item)


def unregister():
    """追加削除用(クラス削除は、register_class内で実行)"""
    bpy.types.TEXT_MT_text.remove(draw_item)

ファイルを保存すると、インストール済みのアドオンに反映されます。
Scriptingワークスペースのテキストエディターでファイルを適当に開き、Open Text FileでVS Codeが起動するのを確認します。

補足

リポジトリのOpenURLとDiffObjのアドオンは、下記の構成になっています。

  • __init__.py:ここで、bl_infoを設定します。
  • core.py:機能をここに書きます。
  • register_class.pyui_classesregister()unregister()を使えるようにしています。リポジトリをコピーしてもそのまま使えます。

下記の特徴があります。

  • core.pyに定義したOperatorクラスとPanelクラスの一覧は自動で作成され、ui_classesで取得できます。
  • クラスの登録削除や、パネルのプロパティの作成削除のためのregister()unregister()は自動で作成されます。
  • 追加の処理をしたい場合は、core.pyregister()unregister()を作成します。追加処理がなければ作成は不要です。

アドオンをGitHubに反映する

機能確認できたら、完成したコードをGitHubで管理しているコードにコピーしてGitHubにコミットして完成です1

以上

  1. 今回作成したOpenTextFileアドオンは説明用なので、記事投稿時にリポジトリは削除しています。

8
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
3