[Blender] アドオン開発個人メモ
Blenderアドオン開発に関する個人的なメモです。 気になる箇所があればトップページに記載しているSNS等でご指摘ください。
命名規則
基本的にPEP8に従うが、クラス名など一部の命名は完全準拠というわけではなさそう。 PEP8のA Foolish Consistency is the Hobgoblin of Little Mindsに次の一文があるため、Blenderのお作法に合わせるのが適切と判断した。
In particular: do not break backwards compatibility just to comply with this PEP!
クラス
標準アドオンのコードやperplexityを用いた検索結果から次の規則で命名することにした。
Property Groupは HT
, MT
のようなキーワードが見つからず、Blender Python APIのexamplesでは MyPropertyGroup
となっている。
しかし、以下の理由から PG
をキーワードとして使用することにした。
- Property GroupだけPrefixが存在しない場合、register/unregisterの対象とすべきクラスとそうでないクラスが名前から判別できない
- 適切な命名規則がわかった時に置換すべきクラスを見つけやすい
- 上記のメリットとBlenderのお作法から外れることを天秤にかけたとき、前者を重要視した
その他、 register
実行時にBlenderコンソールに出力されるwarningも考慮している。
# Header: HT
class <ADDON_NAME>_HT_<header>_<name>(bpy.types.Header):
bl_idname = '<ADDON_NAME>_HT_<header>_<name>'
# example: https://docs.blender.org/api/current/bpy.types.Header.html
# Menu: MT
class <ADDON_NAME>_MT_<menu>_<name>(bpy.types.Menu):
bl_idname = '<ADDON_NAME>_MT_<menu>_<name>'
# example: https://docs.blender.org/api/current/bpy.types.Menu.html
# Operator: OT
class <ADDON_NAME>_OT_<operator>_<name>(bpy.types.Operator):
bl_idname = '<ADDON_NAME>.<operator>_<name>'
# example: https://docs.blender.org/api/current/bpy.types.Operator.html
# Panel: PT
class <ADDON_NAME>_PT_<panel>_<name>(bpy.types.Panel):
bl_idname = 'VIEW3D_PT_<ADDON_NAME>_<panel>_<name>'
# example: https://docs.blender.org/api/current/bpy.types.Panel.html
# UI List: UL
class UI_UL_<ADDON_NAME>_<ui>_<list>_<name>(bpy.types.UIList):
# example: https://docs.blender.org/api/current/bpy.types.UIList.html
# Property Group: PG
class <ADDON_NAME>_PG_<property>_<group>_<name>():
# example: https://docs.blender.org/api/current/bpy.types.PropertyGroup.html
ファイル分割
operator
, property
, ui
で分割している。
__init__.py
でクラスを登録していくが、その順番がパネルの表示順になるようだ。