(terminology)= # 用語集 このページでは、Blenderの初心者やより深い理解を求める方に向けて、BlenderとPMEで使用される主要な用語と概念を説明します。 ## Blenderの基本概念 ### データ(`bpy.data`) Blenderファイル(`.blend`)に保存される全てのデータへのアクセスを提供します。 `bpy.data.objects`・`bpy.data.materials`など、種類ごとのコレクション形式で整理されています。 名前やインデックス形式で直接データにアクセスできる、**静的なデータベース**です。 ```python bpy.data.objects['Cube'] # 特定のオブジェクトデータ bpy.data.materials.new("Gold") # 新規マテリアルの作成 bpy.data.meshes[0] # インデックスによるアクセス obj = bpy.data.objects.get('Cube') if obj: obj.location.x += 1.0 ``` ```{figure} /../../shared/_static/images/terminology/bpy_data_console.png :alt: bpy.dataの例 :align: center :width: 600px Blender Pythonコンソールでの `bpy.data` の使用例 ``` **参考**: [Data Access (bpy.data)](https://docs.blender.org/api/current/bpy.data.html) [bpy.types.BlendData](https://docs.blender.org/api/current/bpy.types.BlendData.html) (bpy-context)= ### コンテキスト(`bpy.context`) ユーザーの作業状態に応じて、**動的な参照**を提供します。 選択中のオブジェクト、アクティブなツール、現在のモード、マウスカーソルを置いているエリアなど、ユーザーの操作によって変化する瞬間的な状況を知ることができます。 例えば、同じショートカットキーでも、3Dビューポートで押した時とシェーダーエディタで押した時で異なる動作をするのは、それぞれのエリアが異なるコンテキスト(文脈)を提供しているからです。 ```python bpy.context.object # 現在アクティブなオブジェクト bpy.context.selected_objects # 選択中の全オブジェクト bpy.context.mode # 現在のモード(OBJECT/EDIT等) bpy.context.area.type # 現在のエリアタイプ # 高度な例:コンテキストを上書きし、特定のエリアでオペレーターを実行 area = next(a for a in bpy.context.window.screen.areas if a.type == 'VIEW_3D') with bpy.context.temp_override(area=area): bpy.ops.view3d.view_selected('INVOKE_DEFAULT') ``` ```{figure} /../../shared/_static/images/terminology/bpy_context_console.png :alt: bpy.contextの例 :align: center :width: 600px Blender Pythonコンソールでの `bpy.context` の使用例 ``` **参考**: [Context (docs.blender.org)](https://docs.blender.org/api/current/bpy.context.html) ::::{admonition} DataとContextの違い :class: hint - bpy.data を使う場面:全マテリアルをリストアップする、特定の名前のオブジェクトを必ず操作する - bpy.context を使う場面:選択中のオブジェクトに対してツールを実行する、現在のモードに応じてUIを切り替える bpy.data は「何が存在するか」という静的な事実を扱い、bpy.context は「今何をしているか」という動的な状況を扱います。前者がデータベース的な性質を持つのに対し、後者はユーザーインターフェースと密接に結びついた、インタラクティブな性質を持ちます。 :::: ### オペレーター(`bpy.ops`) Blenderで特定のアクションを実行する機能単位です。 オブジェクトの追加やベベルなどの代表的な機能だけでなく、UIリストの入れ替えなど小さなアクションまで、全ての機能がオペレーターとして定義されています。 - ホットキーに割り当て可能 - メニュー/ボタンに表示可能 - Pythonスクリプトから呼び出し可能 - マクロで実行可能 PME内では、**マクロオペレーター**や**モーダルオペレーター**を使用して複数のオペレーターを組み合わせ、カスタムツールを作成できます。 **例**: `bpy.ops.mesh.subdivide()` ### ポールメソッド (Poll Method) オペレーターやパネルのPoll関数は、Contextを参照して「今この機能が使えるか」を判定します。 ### キーマップ(Keymap) エリアタイプや編集モードに応じて変化する**ホットキー割り当て**のコレクションです。 - 例: **G**キーはオブジェクトモードでは「移動」に割り当てられていますが、スカルプトモードでは「つかむ」に割り当てられています。 PMEは、これらのキーマップを個人のワークフローに合わせてさらにカスタマイズするのに役立ちます。 **リファレンス**: [Keymap (docs.blender.org)](https://docs.blender.org/manual/en/latest/editors/preferences/keymap.html) ### プロパティ(Property) Blenderの様々なデータ項目(オブジェクトの位置、マテリアル設定など)を指し、通常UIではスライダー、チェックボックス、フィールドとして表示されます。 PMEでは以下が可能です: - メニュー/パネルでプロパティの表示と編集 - スクリプトやPoll関数での参照 - プロパティエディターを介したカスタムプロパティの追加 **例**: `bpy.context.object.location` ### モード(Mode) Blenderの**動作状態**(オブジェクトモード、編集モードなど)を指します。 各モードにはそれぞれのツールとアクションのセットがあります。 - PMEの**Poll**機能により、アクティブなモードに基づいて特定のツールやメニューの表示/非表示を切り替えできます。 **例**: `bpy.context.mode == 'EDIT_MESH'` ## 画面構成の概念 ```{figure} /../../shared/_static/images/blender_manual/interface_window-system_introduction_default-screen.png :alt: Blenderのインターフェース全体 :align: center :width: 700px Blenderのデフォルト画面構成 ``` ### エリア(Area) Blenderインターフェース内の大きなワークスペース領域です。 3Dビューポート、アウトライナーなどの異なるエディタータイプはそれぞれ**エリア**を占有します。 - PMEの**Toggle Side Area**は、実行したエリアを分割し、その隣に一時的なエディターエリアを開閉します。同じエリア内のリージョンを開閉する**Toggle Sidebar**とは別機能です。 - エリアには、ツールバーやプロパティシェルフなどの**リージョン**と呼ばれるサブ領域が含まれる場合があります。 | **関連**: リージョン、ウィンドウ、ワークスペース | **リファレンス**: [Area (docs.blender.org)](https://docs.blender.org/manual/en/latest/interface/window_system/areas.html) ### リージョン(Region) **エリア**内の細分化された領域で、特定のUI要素(ツール、プロパティなど)を含みます。 - PMEの**パネルグループ**機能により、リージョンにカスタムコンテンツを追加できます。 - Sidebarはエリア内にあるリージョンの一種で、独立したエディターエリアではありません。 ```{figure} /../../shared/_static/images/blender_manual/interface_window-system_regions_3d-view.png :alt: 3Dビューのリージョン :align: center :width: 700px 3Dビューポートのリージョン構成(ヘッダー、ツールバー、サイドバー等) ``` **関連**: エリア、パネル **リファレンス**: [Region (docs.blender.org)](https://docs.blender.org/manual/en/latest/interface/window_system/regions.html) ### ヘッダー(Header) エリアの上部または下部にある水平バーです。 通常、メニュー、よく使用されるツールアイコンなどが含まれます。 ```{figure} /../../shared/_static/images/terminology/blender_header.png :alt: Blenderのヘッダー :align: center :width: 700px 3Dビューポートのヘッダー例 ``` - PMEでは{ref}`メニュー/パネル拡張 `を使用してヘッダーにカスタムボタンを追加できます。 | **関連**: リージョン | **リファレンス**: [Header (docs.blender.org)](https://docs.blender.org/manual/en/latest/interface/window_system/regions.html#header) ### パネル(Panel) サイドバーやプロパティエリアによく見られる、折りたたみ可能なUIウィジェットのグループです。 ```{figure} /../../shared/_static/images/blender_manual/interface_window-system_tabs-panels_tabs.png :alt: Blenderのパネル :align: center :width: 500px サイドバー内のパネル例 ``` PMEでは以下が可能です: - 新しいパネルの作成 - 既存パネルの拡張 - パネルのグループ化 - 不要なパネルの非表示 | **関連**: プロパティ、リージョン | **リファレンス**: [Panel (docs.blender.org)](https://docs.blender.org/manual/en/latest/interface/window_system/tabs_panels.html) ## PME固有の概念 ```{figure} /../../shared/_static/images/terminology/pme_overview.png :alt: PME概要 :align: center :width: 700px Pie Menu Editorの概要 ``` ### メニュー(Menu) PMEで作成するカスタマイズ可能なUIコンポーネントを表す広義の用語で、以下を含みます: - パイメニュー - 通常メニュー - マクロオペレーター - モーダルオペレーター - など 各メニューは複数の**スロット**で構成され、それぞれが異なる機能や要素を提供します。 ### スロット(Slot) メニュー内の個別の**要素**または**スロット**です。各スロットは以下のように設定できます: - コマンドの実行 - プロパティの表示または編集 - サブメニューの呼び出し - カスタムレイアウトの描画 **関連**: コマンドタブ、プロパティタブ、メニュータブ、カスタムタブ ### コマンドタブ(Command Tab) スロットエディターのタブの一つで、Pythonコードを実行したり、オペレーターを直接呼び出したりできます。 - 1行のPythonスクリプトの実行 - カスタム関数の呼び出し - 変数やオペレーターの操作 **例**: `C.active_object.location.x += 1.0` ### カスタムタブ(Custom Tab) 描画コードで UI レイアウトを定義する、スロットエディターのタブです。 **例**: ```python L.box().label(text="Custom Layout") ``` ### インタラクティブパネルモード(Interactive Panels Mode) すべてのUI要素内に追加のPMEツールボタンを表示するPMEモードで、以下を簡単にします: - メニューIDの識別 - パネル拡張の設定 - UIのカスタマイズ このモードは、様々な要素やメニューがどこに配置されているかを視覚化するのに役立つため、PMEを学習する際に特に有用です。 ### マクロオペレーター(Macro Operator) **複数のオペレーターを順番に実行**することを可能にします。 PME**マクロオペレーターエディター**では以下が可能です: - オペレーターシーケンスの記録 - オペレーターパラメーターの調整 - 実行フローの管理 複雑なワークフローを1クリックにまとめるのに非常に有用です。 ### モーダルオペレーター(Modal Operator) 継続的なユーザー入力に応答するリアルタイムでインタラクティブなオペレーターです。 PMEの**モーダルオペレーターエディター**で独自のモーダルオペレーターを作成でき、以下が可能になります: - マウス移動への反応 - キーイベントと状態変化 - リアルタイムフィードバックと更新 **カスタムインタラクティブツール**の構築に最適です。 ### Poll メソッド(Poll Method) メニューやツールが**現在使用可能かどうか**を判定するPython関数です。使用可能な場合は`True`、そうでない場合は`False`を返す必要があります。 例: ```python ao = C.active_object; return ao and ao.type == 'MESH' ``` 一般的な使用例: - 現在のモードに基づいたUI要素の有効/無効 - 特定のオブジェクトタイプに機能を制限 - 無効なツールを非表示にしてエラーを防止 ### スロットエディター(Slot Editor) PMEメニュー/ボタンの動作を定義する**中央UI**です。以下のような複数のタブが含まれます: - コマンド(コード実行用) - プロパティ(プロパティ表示用) - メニュー(他のPMEメニューの呼び出し用) - ホットキー(ショートカット呼び出し用) - カスタム(カスタムレイアウト用) ```{figure} /../../shared/_static/images/terminology/pme_slot_editor.png :alt: スロットエディター :align: center :width: 500px スロットエディターのUI ``` スクリプティングが初めての場合でも、グラフィカルインターフェースを通じてすべてを設定できるように設計されています。 ## 高度な概念 ### イベントシステム(Event System) キーボードとマウスイベントを追跡するBlenderの入力処理メカニズムです。以下に不可欠です: - モーダルオペレーター - カスタムホットキー - インタラクティブツール 例: ```python E.ctrl and E.shift and message_box("Ctrl+Shift Pressed") ``` ### レイアウトシステム(Layout System) UIレイアウトを構築するBlenderのシステムです。PMEはこのシステムに依存して以下を行います: - ラベル、ボタン、プロパティフィールドの配置 - オペレーターとカスタムウィジェットの位置決め - UI要素の階層構造化 例: ```python L.box().label(text=text, icon=icon, icon_value=icon_value) ``` ### オペレーター実行コンテキスト(Operator Execution Context) オペレーターの実行方法を決定します。最も一般的な2つのコンテキストは: - **INVOKE_DEFAULT** Blenderがマウス位置決めやポップアップ確認などの追加ユーザー入力を待つインタラクティブモード。 - **EXEC_DEFAULT** 事前設定されたパラメーターでオペレーターを即座に実行。スクリプトやマクロでよく使用される。 **例**: ```python # マウス入力に基づいてオブジェクトをインタラクティブに移動 bpy.ops.transform.translate('INVOKE_DEFAULT') # ユーザー入力なしでオブジェクトをX軸に沿って5.0移動 bpy.ops.transform.translate('EXEC_DEFAULT', value=(5.0, 0.0, 0.0)) ``` | **関連**: オペレーター、コマンドタブ、モーダルオペレーター、マクロオペレーター | **リファレンス**: [Execution Context (docs.blender.org)](https://docs.blender.org/api/current/bpy.ops.html#execution-context)