本日はBlenderPython枠です。
先日Substance-Toolsを導入した際にアドオンの設定にSubstancePainterのエクスポートパスが指定されていることが確認できました。
今回はこの実装を行っていきます。
〇コード
今回は次のようなコードを実行しました。
環境はBlener3.5を使用しています。 BlenderのAPIはバージョンによって大きく異なるため3.5以外のバージョンではエラーが出る可能性があります。
#アドオンの定義 bl_info = { "name": "Open Folder Operator", "blender": (3, 5, 0), "category": "Object", } import bpy import os class MyAddonPreferences(bpy.types.AddonPreferences): bl_idname = __name__ folder_path: bpy.props.StringProperty( name="Folder Path", description="Set the folder path for the addon", subtype='DIR_PATH', ) def draw(self, context): layout = self.layout layout.prop(self, "folder_path") class OBJECT_OT_OpenFolderOperator(bpy.types.Operator): bl_idname = "object.open_folder_operator" bl_label = "Open Folder Operator" def execute(self, context): preferences = context.preferences.addons[__name__].preferences folder_path = preferences.folder_path if folder_path: bpy.ops.wm.path_open(filepath=folder_path) return {'FINISHED'} class OBJECT_PT_custom_panel(bpy.types.Panel): bl_idname = "OBJECT_PT_custom_panel" bl_label = "Custom Panel" bl_space_type = 'VIEW_3D' bl_region_type = 'UI' bl_category = "Tools" def draw(self, context): layout = self.layout layout.operator("object.open_folder_operator") def register(): bpy.utils.register_class(MyAddonPreferences) bpy.utils.register_class(OBJECT_OT_OpenFolderOperator) bpy.utils.register_class(OBJECT_PT_custom_panel) def unregister(): bpy.utils.unregister_class(MyAddonPreferences) bpy.utils.unregister_class(OBJECT_OT_OpenFolderOperator) bpy.utils.unregister_class(OBJECT_PT_custom_panel) if __name__ == "__main__": register()
このコードをアドオンとして読み込むと次のようにプリファレンス画面に設定という項目でフォルダパスを指定できます。
3DViewウィンドウのタブでOpen Folder Operatorを選択すると設定したパスがファイルエクスプローラーで開きます。
このコードでは2つのクラスを使用しています。
まずはプリファレンス部の描画処理です。
class MyAddonPreferences(bpy.types.AddonPreferences): bl_idname = __name__ folder_path: bpy.props.StringProperty( name="Folder Path", description="Set the folder path for the addon", subtype='DIR_PATH', ) def draw(self, context): layout = self.layout layout.prop(self, "folder_path")
アドオンの設定を管理するクラスであるbpy.types.AddonPreferencesを引数として与えることでプリファレンス画面からアドオンにアクセスできるようになります。
ここではfolder_pathとして定義しています。
こうして設定した項目をアドオンのクラス側でpreference.folder_path
として使用することができます。
class OBJECT_OT_OpenFolderOperator(bpy.types.Operator): bl_idname = "object.open_folder_operator" bl_label = "Open Folder Operator" def execute(self, context): preferences = context.preferences.addons[__name__].preferences folder_path = preferences.folder_path if folder_path: bpy.ops.wm.path_open(filepath=folder_path) return {'FINISHED'}
アドオンを作るうえでこのような設定項目は必須級で大切なのでしっかり押さえていきたいです。