メニューを完全に置き換えてしまうようなアドオンの場合は、他のアドオンのメニュー追加をなくしてしまう。
この問題の解決方法を紹介する。
もくじ
読み込み順番
アドオンの処理が競合している場合、読み込み順の遅いものが最終的に反映される。
下記のコードで確認することができる。
for a in bpy.context.preferences.addons: a
読み込み順番を変える
読み込み順番は、アドオンを有効化した順番で決定される。
最後に反映させたいアドオンを、一旦無効化して、再度有効化する。
アドオンの登録を変える
メニューを完全に置き換えてしまうようなアドオンの場合は、先に読み込まれる必要がある。
アドオンの処理によって読み込み順を変更するには、登録の際に順番を確認して、最後でないなら一旦登録解除して、もう一度登録するといいらしい。
ただし、順番の最後にしかできないようだ。
def register(): if bpy.context.user_preferences.addons[-1].module != __name__: module_name = __name__ addons = bpy.context.user_preferences.addons while module_name in addons: addon = addons.get(module_name) if addon: addons.remove(addon) addon = addons.new() addon.module = module_name
その他
クラス名、オペレーターID名は極力オリジナルになるようにする。
クラス名
- OBJECT_OT_xxx
- ↓
- MYADDON_OT_xxx
MYADDONの部分を固有のアドオン名にする。
オペレーターID名
- object.xxx
- ↓
- my_addon.xxx