作成日:2024-03-25
個人的に自作し、使用しているアドオンがあり、その備忘録となります。主にUIに表示させる方法。クラスを登録する方法がメインとなります。
import bpy
bl_info = {
"name": "weight: pluginname",
"author": "yumeno",
"version": (1, 0),
"blender": (3, 3, 1),
"location": "",
"description": "説明文",
"warning": "",
"support": "TESTING",
"wiki_url": "",
"tracker_url": "",
"category": "Mesh"
}
class Original_Class(bpy.types.Panel):
bl_space_type = 'VIEW_3D'
bl_region_type = 'UI'
bl_category = "tabname"
bl_label = "ABCD"
def draw(self, context):
layout = self.layout
layout.label = "text"
classs = [
Original_Class
]
#
# register
#
def register():
for c in classs:
bpy.utils.register_class(c)
#
# unregister
#
def unregister():
for c in classs:
bpy.utils.unregister_class(c)
#
# script entry
#
if __name__ == "__main__":
register()
上記のコードをコピペして使用することができます。3.3.1vまで4.0以降は未確認。
blender 2.8からapi関連がかなり変わったので度々使えない機能があったりするのがまた大変だ。
bl_info = {}
このに「bl_info」あるものはプラグインの概要を記入します。
weight,View,Mesh,Animationなどあり、厳格にルールが決められていませんが暗黙的ルールで入れておく方が無難
Testing,Community,OfficialがあるCommunityで良いと思う。
プラグインのカテゴリー
他のものについては個人で使う上ではあまり重要ではないので割愛します。
プラグインを作成するうえで重要なUI,結構ややこしい、とりあえず、UI,WINDOWだけが使えれば一旦いいのかな?
このサンプルのコードから簡単に解説します。
class Original_Class(bpy.types.Panel):
bl_space_type = 'VIEW_3D'
bl_region_type = 'UI'
bl_category = "tabname"
bl_label = "ABCD"
def draw(self, context):
layout = self.layout
layout.label = "text"
どのモード時に表示させるかを記入します。 bl_space_type一覧
例えば「DOPESHEET_EDITOR」とするとここでしか表示されません。 私はモデリング時に使うプラグインなので、基本的にはVIEW_3Dを入れることが多いかな
これもまた重要で
region_type一覧 どこのカテゴリーに入れるかを聞かれます。 それぞれ覚えにくいため、動くコードも記載しておきます。
右のタブにUIを追加できます。
class Original_Class(bpy.types.Panel):
bl_space_type = 'VIEW_3D'
bl_region_type = 'UI'
bl_category = "tabname"
bl_label = "ABCD"
def draw(self, context):
layout = self.layout
layout.label = "text"
左のツールにUIを追加できます。
class Original_Class(bpy.types.Panel):
bl_space_type = 'VIEW_3D'
bl_region_type = 'TOOLS'
bl_label = "ABCD"
def draw(self, context):
layout = self.layout
layout.label(text="text")
class Original_Class(bpy.types.Panel):
bl_space_type = 'FILE_BROWSER'
bl_region_type = 'TOOL_PROPS'
bl_label = "Sample"
bl_parent_id = "FILE_PT_operator"
def draw(self, context):
layout = self.layout
layout.label(text="text")
右のプロパティに追加する時に使う。
これもよく使う。
class Original_Class(bpy.types.Panel):
bl_space_type = 'VIEW_3D'
bl_space_type = 'PROPERTIES'
bl_region_type = 'WINDOW'
bl_context = "data"
bl_label = "SAMPLES"
def draw(self, context):
layout = self.layout
layout.label(text="text")
dataと設定しているので、dataのタブ時に表示されます。他には、「bl_context」,「material」、「curve_edit」,「render」,「scene」,「objectmode」,「view_layer」等々...
これも便利な機能だが、コードがちょっとめんどくさいことに...
右クリックして出てくるメニューに追加するには次の通りです。
import bpy
bl_info = {
"name": "weight: pluginname",
"author": "yumeno",
"version": (1, 0),
"blender": (3, 3, 1),
"location": "",
"description": "説明文",
"warning": "",
"support": "TESTING",
"wiki_url": "",
"tracker_url": "",
"category": "Mesh"
}
def appendcontextmenu(self, context):
#self.layout.operator_context = 'INVOKE_REGION_WIN'
self.layout.menu(VERTEX_MT_custom_menu.bl_idname,
text="ABCDEEE")
class VERTEX_MT_custom_menu(bpy.types.Menu):
bl_idname = "VIEWContextmenu"
bl_label = "contextmenue-desu"
def draw(self, context):
layout = self.layout
layout.label(text="SAMPLE")
classs = [
VERTEX_MT_custom_menu
]
#
# register
#
def register():
for c in classs:
bpy.utils.register_class(c)
bpy.types.VIEW3D_MT_mesh_add.prepend(appendcontextmenu)
#
# unregister
#
def unregister():
for c in classs:
bpy.utils.unregister_class(c)
bpy.types.VIEW3D_MT_mesh_add.remove(appendcontextmenu)
#
# script entry
#
if __name__ == "__main__":
register()
import bpy
bl_info = {
"name": "weight: pluginname",
"author": "yumeno",
"version": (1, 0),
"blender": (3, 3, 1),
"location": "",
"description": "説明文",
"warning": "",
"support": "TESTING",
"wiki_url": "",
"tracker_url": "",
"category": "Mesh"
}
def appendcontextmenu(self, context):
layout = self.layout
layout.label(text="SAMPLE")
class VERTEX_MT_custom_menu(bpy.types.Menu):
bl_idname = "VIEWContextmenu"
bl_label = "contextmenue-desu"
def draw(self, context):
layout = self.layout
layout.label(text="SAMPLE")
classs = [
VERTEX_MT_custom_menu
]
#
# register
#
def register():
for c in classs:
bpy.utils.register_class(c)
bpy.types.VIEW3D_MT_edit_mesh_context_menu.prepend(appendcontextmenu)
#
# unregister
#
def unregister():
for c in classs:
bpy.utils.unregister_class(c)
bpy.types.VIEW3D_MT_edit_mesh_context_menu.remove(appendcontextmenu)
#
# script entry
#
if __name__ == "__main__":
register()
個人的にはパイメニューをよく使っているが、かなり複雑なので、後でこの記事に追加します。 4.0でもプラグインが使えますように...
質問や、間違いがありましたら、お気軽にどうぞ
※お名前とコメントの内容を入力してください。
※全てこのブログ上に公表されます。
※許可なく管理者によって修正・削除する場合がございます。 詳しくはプライバシーポリシーを参照ください