忘却まとめ

Blenderの中級者・上級者向けの踏み込んだ情報や、アドオン・3DCGに関する情報を記事にします

アドオンの競合を回避する【Blender / Python】

Python

投稿日:

メニューを完全に置き換えてしまうようなアドオンの場合は、他のアドオンのメニュー追加をなくしてしまう。

この問題の解決方法を紹介する。

読み込み順番

アドオンの処理が競合している場合、読み込み順の遅いものが最終的に反映される。

下記のコードで確認することができる。

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

How to know the order in which scripts are loaded? - Coding / Python Support - Blender Artists Community

その他

クラス名、オペレーターID名は極力オリジナルになるようにする。

クラス名

  • OBJECT_OT_xxx
  • MYADDON_OT_xxx

MYADDONの部分を固有のアドオン名にする。

オペレーターID名

  • object.xxx
  • my_addon.xxx

アドオンの制作依頼はこちら

-Python

Copyright© 忘却まとめ , 2020 All Rights Reserved Powered by STINGER.