サイドバーパネル
class MYTOOL_PT_render(bpy.types.Panel):
"""My Tool"""
bl_idname = 'MYTOOL_PT_render'
bl_label = "Render"
bl_space_type = 'VIEW_3D'
bl_region_type = 'UI'
bl_category = "My Tool"
def draw(self, context):
layout = self.layout
scene = context.scene
layout.label(text="Size:")
row = layout.row(align=True)
row.prop(scene, "resolution_x")
row.prop(scene, "resolution_y")
layout.label(text="Are You Ready?:")
row = layout.row()
row.scale_y = 1.5
row.operator("render.render")
def register():
bpy.utils.register_class(MYTOOL_PT_render)
def unregister():
bpy.utils.unregister_class(MYTOOL_PT_render)
if __name__ == "__main__":
register()
Code language: Python (python)
ドキュメント:
bpy.types.Panel | Blender Python API [Official]
参考:
UI パネルに自作のプロパティを追加する | MR が楽しい
Creating a Custom Panel with Blender’s Python API (Mina Pêcheux) | Geek Culture
Int Property not displaying in my panel? – Blender Stack Exchange
How to change the location of an addon in the UI – Blender Stack Exchange
Is there a code to draw a horizontal line or vertical space? – Blender Stack Exchange
サブパネル
パネルを実装するクラスで、bl_parent_id
を指定する。
class VIEW3D_PT_overlay_example(bpy.types.Panel):
bl_space_type = 'VIEW_3D'
bl_region_type = 'HEADER'
bl_parent_id = 'VIEW3D_PT_overlay'
bl_label = "Example"
@classmethod
def poll(cls, context):
return context.active_object and context.active_object.type == 'MESH'
def draw(self, context):
layout = self.layout
col = layout.column()
col.label(text="Hello, World")
def register():
bpy.utils.register_class(VIEW3D_PT_overlay_example)
def unregister():
bpy.utils.unregister_class(VIEW3D_PT_overlay_example)
Code language: Python (python)
ドキュメント:
bpy.types.Panel.bl_parent_id | Blender Python API [Official]
参考:
How can I know if a panel is the parent of other subpanels? – Blender Stack Exchange
Best way to store options for panels – Blender Stack Exchange
ボタンを設置する
class EXAMPLE_PT_xxx(bpy.types.Panel):
# ...
def draw(self, context):
layout = self.layout
layout.operator('object.transform_apply', text="Apply All Transforms")
Code language: Python (python)
ドキュメント:
bpy.types.UILayout.operator | Blender Python API [Official]
項目を一時的に無効化する
enabled
プロパティに False
を指定する。
class EXAMPLE_PT_xxx(bpy.types.Panel):
# ...
def draw(self, context):
layout = self.layout
col = layout.column()
col.enabled = False
col.prop(scene, ...)
Code language: Python (python)
ドキュメント:
UILayout.enabled | Blender Python API [Official]
参考:
プロパティの更新イベントと UI 切り替え | MR が楽しい
How to disable a single component in a custom panel? – Blender Artists Community
パネルを条件に応じて表示する (poll)
条件を判定してパネルの表示/非表示を切り替えるには、クラスメソッド poll
を定義する。
import bpy
class EXAMPLE_PT_xxx(bpy.types.Panel):
# ...
@classmethod
def poll(cls, context):
return context.object is not None
Code language: Python (python)
コード:
選択されているオブジェクトがメッシュで名前が Cube の時だけ UI を表示する (dskjal) – GitHub Gist
ドキュメント:
Simple Object Panel | Blender Python API [Official]
モジュールの読み込み順/パネルの順序
参考:
How to know the order in which scripts are loaded? – Blender Artists Community
How I can define the order of the panels? – Blender Stack Exchange
パネルを動的に登録する
参考:
Change Blender’s Preferences Dynamically – Blender Stack Exchange
サイドバータブ
ドキュメント:
Human Interface Guidelines / Sidebar Tabs | Blender Developer Wiki [Official]
参考:
Trouble with vertical toolbar tabs! Any idea or script to fix this mess? – Blender Artists Community
Remove addons from tabs in 3D window – Blender Stack Exchange
N panel tab clutter – Right-Click Select
right toolbar needs improvment in 2.8 – Right-Click Select
More options for reordering workspaces and sidebar tabs – Right-Click Select
Toolbar / Sidebar Interface Issue – Blender Developer Talk [Official]
Is it possible to change the active bl_category with python? – Blender Stack Exchange
sidebar custom colors for tabs – Blender Stack Exchange
表示形態/場所
リージョン
bl_region_type
: 表示形態を指定する
WINDOW
HEADER
CHANNELS
TEMPORARY
UI
TOOLS
TOOL_PROPS
PREVIEW
HUD
NAVIGATION_BAR
EXECUTE
FOOTER
TOOL_HEADER
スペース
bl_space_type
: 表示するエディター/場所を指定する
VIEW_3D
IMAGE_EDITOR
NODE_EDITOR
SEQUENCE_EDITOR
CLIP_EDITOR
DOPESHEET_EDITOR
GRAPH_EDITOR
NLA_EDITOR
TEXT_EDITOR
CONSOLE
INFO
TOPBAR
STATUSBAR
OUTLINER
PROPERTIES
FILE_BROWSER
SPREADSHEET
PREFERENCES
ドキュメント:
Panel (bpy.types.Panel) | Blender Python API [Official]
参考:
Creating panels for placing Blender add-ons user interface (UI) | Interplanety
How to change the location of an addon in the UI – Blender Stack Exchange
オペレーターを呼び出す
参考:
How to create panel for setting operator properties? – Blender Artists Community
Storing property in operator, which can be set by UI panel – Blender Artists Community
Display and set internal operator properties from custom Panel UI – Blender Stack Exchange
How display and use operator properties in a UI panel? – Blender Stack Exchange
Why can’t we display operator properties within a Panel? – Blender Developer Forum
オブジェクトのカスタムプロパティを操作する
参考:
How to create a panel with different properties for different objects – Blender Stack Exchange
標準の UI を元にカスタマイズしたい
手順
- メニューから「編集 > プリファレンス」 (Edit > Preferences) を選択し、「プリファレンス」ウィンドウを開く。
- 「インターフェイス」 (Interface) タブに切り替え、「ディスプレイ」パネルで「開発者用オプション」 (Developer Extras) を有効にする。
- UI の要素を右クリックして、「ソースを編集」 (Edit Source) を選択する。
- 「Scripting」ワークスペースに切り替えて、テキストエディターでドロップダウンリストから該当するテキストファイルを開いてソースコードを参照する。
参考:
How to draw Blender’s default panel in Operator draw function? – Blender Stack Exchange
サンプル/テンプレート
コード:
templates_py/ui_tool_simple.py – blender/blender – GitHub
templates_py/ui_panel.py – blender/blender – GitHub