本日は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'}
アドオンを作るうえでこのような設定項目は必須級で大切なのでしっかり押さえていきたいです。