使い方

参考:

Blender の UI を制御する | はじめての Blender アドオン開発

How to create a custom UI? – Blender Stack Exchange

メニューを作成する

参考:

Menu | Blender Python API [Official]

メニューに項目を追加する

サブメニューを追加する。

class EXAMPLE_MT_sub_menu(bpy.types.Menu): bl_idname = 'example.sub_menu' bl_label = "Sub Menu" bl_description = "Example Sub Menu" def draw(self, context): layout = self.layout layout.operator('transform.resize') def menu_func(self, context): layout = self.laytout layout.separator() layout.menu('example.sub_menu') def register(): bpy.utils.register_class(EXAMPLE_MT_sub_menu) bpy.types.EXAMPLE_MT_main_menu.append(menu_func) def def unregister(): bpy.utils.unregister_class(EXAMPLE_MT_sub_menu) bpy.types.EXAMPLE_MT_main_menu.remove(menu_func)
Code language: Python (python)

参考:

プラグインでサブメニューを作成する方法 – Qiita

UI に項目を追加 | TomoG のごちゃまぜ倉庫

サブメニューを作成する | はじめての Blender アドオン開発

メニューの追加登録候補について | nikogoli

Official keymap example does not work? – Blender Developer Talk

How to add a custom object entry to the add menu? – Blender Stack Exchange

How to add a custom menu item to the object menu? – Blender Stack Exchange

Deleting unwanted New objects in the “add Object” menu – Blender Stack Exchange

Operator docstrings displayed on buttons, not in search mode – Blender Stack Exchange

メニューを置き換える

参考:

How to delete an existing menu? – Blender Stack Exchange

ダイアログ/ポップアップを表示する

こちらのページを参照

参考:

Blender の UI を制御する 3 | はじめての Blender アドオン開発

Blender でボタンが押されたときポップアップウインドウを表示する (dskjal) – GitHub Gist

Creating pop-up panels with user UI in Blender add-on | Interplanety

Dialog Box | Blender Python API [Official]

パネルを作成する

サイドバーパネル
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)

参考:

Blender 2.8 の Python 実行で UI パネルを追加する | MR が楽しい

Blender 2.8 で UI パネルに自作のプロパティを追加する | MR が楽しい

Panel 編 | めもてう

bpy.types.Panel | Blender Python API [Official]

How to change the location of an addon in the UI – Blender Stack Exchange

Is there a Blender Python UI code to draw a horizontal line or vertical space? – Blender Stack Exchange

コード:

templates_py/ui_tool_simple.py – blender/blender – GitHub

templates_py/ui_panel.py – blender/blender – GitHub

サブパネル

パネルを実装するクラスで、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

列/行を作成する (column / row)

参考:

User interface elements alignment by columns | Interplanety

User Interface Layout – Best Practice | Blender Python API [Official]

How do I use multiple columns in my add-on UI? – Blender Stack Exchange

グリッドフロー (grid_flow / column_flow)

参考:

bpy.types.UILayout.grid_flow | Blender Python API [Official]

bpy.types.UILayout.column_flow | Blender Python API [Official]

Column Align – Blender Stack Exchange

スプリット (split)

参考:

bpy.types.UILayout.split | Blender Python API [Official]

bpy.types.UILayout.use_property_split | Blender Python API [Official]

keeping a UIlayout box a specific width percentage – Blender Artists Community

How to control spacing/alignment of Label + Horizontal Enum Property? – Blender Stack Exchange

how to create UIList with auto-aligned three columns? – Blender Stack Exchange

プロパティ欄を作成する (prop)

必須
  • data
  • property
任意
  • text
  • text_ctxt
  • translate
  • icon
  • expand
  • slider
  • toggle
  • icon_only
  • event
  • full_event
  • emboss
  • index
  • icon_value
  • invert_checkbox
こちらのページを参照

参考:

bpy.types.UILayout.prop | Blender Python API [Official]

オブジェクトを選択する

スポイトアイコン付きのオブジェクト選択欄を作成する。

参考:

オブジェクト指定のアドオンスクリプト | MR が楽しい

Object selection box with eyedropper – Blender Stack Exchange

Make the eyedropper tool available in add-ons via Python – Right-Click Select

ドロップダウンリストを作成する

参考:

create drop-down list in menu panel – Blender Stack Exchange

GUI を作成する

参考:

Addon のチェックボックスの追加とプロパティへのアクセス | ぬの部屋 (仮)

Code Snippets/Interface | wiki.blender.jp

アイコンを表示する

参考:

UILayout.prop | Blender Python API [Official]

UILayout.label | Blender Python API [Official]

New icons for Blender 2.8x – Blender Developer Talk [Official]

2.8 Outlined/Coloured Icon Adaptation – Blender Developer Talk [Official]

Colored icons in add-on – Blender Developer Talk [Official]

New icons for Blender 2.8 – Blender Artists Community

2.8 Outlined/Coloured Icon Adaptation – Blender Artists Community

Is there a list or something available which shows the code of the Symbols of Blender – Blender Stack Exchange

How to edit 2.8 UI icons? – Blender Stack Exchange

Changing the name / icon / function of menu / pie menu / panel with a condition? – Blender Stack Exchange

項目に色を付ける (alert)

参考:

In Python is it possible to change the background color of a property ui? – Blender Stack Exchange

項目の順序

  • append最後に追加する
  • prepend最初に追加する

コード:

append – bpy_types.py at 2e06c223cc – GitHub

prepend – bpy_types.py at 2e06c223cc – GitHub

_GenericUI – bpy_types.py at 2e06c223cc – GitHub

参考:

Rearranging elements of a panel – Blender Stack Exchange

How to change the order of a custom function added in the dropdown menu in the header region in 2.81 with python – Blender Stack Exchange

パイメニューを作成する

参考:

Blender でオリジナルのマーキングメニューを作成する方法 | Harkerblog

Permanently expanded submenu in pie menu – Blender Artists Community

Is there a way to add a custom Pie Menu in 2.8? – Blender Stack Exchange

Pie Menus with custom positions – Blender Stack Exchange

How to properly overwrite Blender default keys with Pie Menu hotkeys – Blender Stack Exchange

Mesh / Object Mode with Pie menu? – Blender Stack Exchange

Make a Pie-Specials Menu, dependent on selection type – Blender Stack Exchange

shift in my hotkeys toggles multiselection mode between vertex edge and faces, how to toggle off previous mode? – Blender Stack Exchange

Can the mesh select mode menu converted to a pie menu in Blender 2.72? – Blender Stack Exchange

How would one code a pie menu with an additional traditional menu beneath it? – Blender Stack Exchange

メニューからパイメニューを開く

オブジェクトコンテキストメニューからスナップパイメニューを開く。

import bpy def custom_memu(self, context): layout = self.layout op = layout.operator("wm.call_menu_pie", text="Snap") op.name = "VIEW3D_MT_snap_pie" layout.separator() def register(): bpy.types.VIEW3D_MT_object_context_menu.prepend(custom_menu) def unregister(): bpy.types.VIEW3D_MT_object_context_menu.remove(custom_menu) if __name__ == '__main__': register()
Code language: Python (python)

参考:

pie menu inside pie menu – Blender Stack Exchange

パネルを条件に応じて表示する (poll)

条件を判定してパネルの表示・非表示を切り替えるにはクラスメソッド poll を定義する。

@classmethod def poll(cls, context): return context.object is not None
Code language: Python (python)

コード:

Blender で選択されているオブジェクトがメッシュで名前が Cube の時だけ UI を表示する (dskjal) – GitHub Gist

参考:

Simple Object Panel | Blender Python API [Official]

パネルを一時的に無効化する

enabled プロパティに False を指定する。

class MYTOOL_PT_test(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]

How to disable a single component in a custom panel? – Blender Artists Community

How to do i disable a row.operator in my custom panel by detecting if there is a specific modifier type and name is present or not? – Blender Stack Exchange

モジュールの読み込み順/パネルの順序

参考:

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

The Toolbar/Sidebar Interface Issue – Blender Developer Talk [Official]

sidebar custom colors for tabs – Blender Stack Exchange

スペシャルメニューに項目を追加する

参考:

スペシャルメニューに任意のメニューを追加するアドオンを作る方法 | 気まぐれブロマガ

Blender 2.8: Where is the Specials Menu? | Blender 3D Architect

パネル (Panel)

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

参考:

Creating panels for placing Blender add-ons user interface (UI) | Interplanety

Panel (bpy.types.Panel) | Blender Python API [Official]

How to change the location of an addon in the UI – Blender Stack Exchange

イベント (Event)

参考:

スクリプトでマウスやキーボードのイベントを扱う方法 – Qiita

Event (bpy.types.Event) | Blender Python API [Official]

prop_search

参考:

prop_search の使い方 | blender-script メモ

Object selection box in addon – Blender Stack Exchange

Limit “prop_search” to Specific Types of Objects – Blender Stack Exchange

Search custom properties in objects on the scene – Blender Stack Exchange

メッセージを出力する (report)

参考:

Blender 2.8 で UI パネルの処理にエラーメッセージの表示を追加する | MR が楽しい

bpy.types.Operator.report | Blender Python API [Official]

Is it possible to print to the Report window in the Info view? – Blender Stack Exchange

How to script add-on info and warnings? – Blender Stack Exchange

プログレスバー

参考:

How to show to the user a progression in a script? – Blender Stack Exchange

ヘッダー

参考:

Timeline header python modification – Blender Stack Exchange

Add custom menu at specific location in the header – Blender Stack Exchange

UILayout

こちらのページを参照

参考:

UILayout | Blender Python API [Official]

UIList

参考:

UIList | Blender Python API [Official]

Tips

参考:

User Interface Layout – Best Practice | Blender Python API [Official]

List Manipulation – Best Practice | Blender Python API [Official]

まとめ

参考:

アドオンのメニューを追加する/既存メニューを完全に置き換える/他アドオンのメニューも保持する | 忘却まとめ

メニューの作り方/様々なレイアウト要素の紹介 | 忘却まとめ

Blender 関連の雑多なメモ類 | nikogoli

Cookbook/Code snippets/Interface | BlenderWiki (archive)

Blender Icons

リポジトリ:

Shrinks99/blender-icons: Blender’s icons have all been stored in a single svg file – GitHub

デモ:

Blendicons (wilkinson.graphics)

Icon Viewer

テキストエディター

サイドバーで「Dev」タブを開いて、「Icon Viewer」パネルでアイコン一覧を確認する。

Python コンソール

ヘッダーの「Icon Viewer」ボタンを押して、ダイアログでアイコン一覧を確認する。

ドキュメント:

Icon Viewer | Blender Manual [Official]

参考:

Blender 2.8 で Icon Viewer を使ってアイコンの ID を確認する | MR が楽しい

Icon Viewer – 標準装備アイコンの名前を確認できる | CGrad Project

Layout Practice

学習用サンプル

入手:

Layout Practice – UI Layoutを学習するアドオン | Gumroad

UI Layout を学習するアドオン | Bookyakuno

参考:

メニューの作り方/様々なレイアウト要素の紹介 | 忘却まとめ

記事をシェアする:
タグ:

コメントを残す

メールアドレスが公開されることはありません。

Protected by reCAPTCHA