サイドパネル 自動オープン アドオン起動時
マテリアルプレヴュー自動選択 起動時
└─ Blender5_アドオン開発標準仕様.txt
├─ コード記述順序
├─ DEFAULTS
├─ Prefix自動設定
├─ Prefix手動変更対応
├─ リンクパネル
├─ アドオン削除パネル
├─ UI規則
└─ エラー対策
# Blender 5以降専用
# 共通定義・Prefix自動設計ルール
## 4. 共通定義
このセクションは、作成するアドオンごとに**内容を自動的に最適化する**こと。
固定文字列を毎回そのままコピーして使用してはいけない。
---
# 4-1. アドオン名から最適なPrefixを決定する
アドオンの目的・機能・名称を分析し、そのアドオン専用のPrefixを毎回自動的に決定する。
例:
```python
PREFIX_VAL = "RAD_GEOM_"
を毎回固定で使用するのではなく、
放射矢印
→ RADIAL_ARROW_
球体穴作成
→ SPHERE_HOLE_
球面窓
→ SPHERICAL_WINDOW_
トーラス生成
→ TORUS_STUDIO_
円錐光線
→ CONE_RAY_
のように、アドオンの目的が分かるPrefixを選択する。
Prefixは原則として、
英大文字 + アンダースコア
とする。
例:
PREFIX_VAL = "SPHERICAL_WINDOW_"
日本語はPrefix内部に使用しない。
長すぎるPrefixは避ける。
Prefixだけを見れば、そのアドオンが生成したデータであることが分かる名前を優先する。
最重要。
ユーザーが、
PREFIX_VAL = "SPHERICAL_WINDOW_"
を手動で、
PREFIX_VAL = "MY_WINDOW_"
に変更しても、アドオン全体が正常動作するようにする。
Prefix文字列をコード中に直接大量記述してはいけない。
禁止:
bpy.data.objects.get("SPHERICAL_WINDOW_Main")
bpy.data.objects.get("SPHERICAL_WINDOW_Window")
bpy.data.collections.get("SPHERICAL_WINDOW_Collection")
代わりに、必ずPrefixから名前を生成する。
例:
def make_name(name):
return f"{PREFIX_VAL}{name}"
使用例:
main_name = make_name("Main")
window_name = make_name("Window")
collection_name = make_name("Collection")
共通定義または共通ユーティリティに、
def make_name(suffix):
return f"{PREFIX_VAL}{suffix}"
を用意する。
必要に応じて、
def make_object_name(name):
return make_name(f"OBJ_{name}")
def make_collection_name(name):
return make_name(f"COL_{name}")
def make_material_name(name):
return make_name(f"MAT_{name}")
などを使用する。
以下のデータには、原則としてPrefixを使用する。
Object
Collection
Material
Mesh
Curve
Text
Modifier関連名称
生成物識別用名称
例:
SPHERICAL_WINDOW_OBJ_Main
SPHERICAL_WINDOW_OBJ_Window
SPHERICAL_WINDOW_COL_Main
SPHERICAL_WINDOW_MAT_Window
ユーザーが、
PREFIX_VAL = "AAA_"
から、
PREFIX_VAL = "BBB_"
に変更した場合、
新しく生成されるデータは、
BBB_OBJ_Main
BBB_OBJ_Window
BBB_COL_Main
BBB_MAT_Window
となる。
コード内部に旧Prefixが残っていて、検索対象が固定される状態は禁止。
Pythonのクラス名までPrefix文字列から動的生成する必要はない。
例えば、
class SPHERICAL_WINDOW_OT_create(bpy.types.Operator):
のようなPython内部クラス名は固定してよい。
一方、Blender内に生成されるデータ名は、
PREFIX_VAL
から生成する。
つまり、
Python内部識別子
↓
固定・安定
Blenderデータ名
↓
PREFIX_VALから生成
という構造を基本とする。
bl_idname はPrefix変更に連動させる必要がない。
例:
bl_idname = "spherical_window.create"
のようにアドオン固有の内部IDとして固定する。
ただし、別アドオンと衝突しない名称を毎回選択する。
以下も固定値を毎回コピーしない。
ADDON_CATEGORY = "Radial Geometry"
アドオンの目的に合わせて最適なカテゴリ名を設定する。
例:
ADDON_CATEGORY = "Spherical Window"
ADDON_CATEGORY = "Radial Geometry"
ADDON_CATEGORY = "Torus Studio"
など。
ただし、ユーザーが明示的にカテゴリ名を指定した場合は、その指定を優先する。
最終的には、アドオンごとに次のような形を基本とする。
# =========================================================
# 4. 共通定義
# =========================================================
# アドオン機能から自動的に最適化する
PREFIX_VAL = "SPHERICAL_WINDOW_"
# UIカテゴリ
ADDON_CATEGORY = "Spherical Window"
def make_name(suffix):
return f"{PREFIX_VAL}{suffix}"
def make_object_name(name):
return make_name(f"OBJ_{name}")
def make_collection_name(name):
return make_name(f"COL_{name}")
def make_material_name(name):
return make_name(f"MAT_{name}")
以下のコードのPrefix部分だけを変更しても、
PREFIX_VAL = "MY_CUSTOM_"
アドオンが正常動作すること。
その結果、
MY_CUSTOM_OBJ_Main
MY_CUSTOM_OBJ_Window
MY_CUSTOM_COL_Main
MY_CUSTOM_MAT_Window
のように生成されること。
コード内に旧Prefixをハードコードしないこと。
今後アドオンを作成するときは、
「Prefixを毎回最適な名前に決める」
ことを標準仕様とする。
さらに、
「Prefixをユーザーが1か所で手動変更できる」
ことを必須条件とする。
したがって、
PREFIX_VAL = "RAD_GEOM_"
を単純な固定テンプレートとして毎回コピーするのではなく、
アドオンの目的を分析 ↓ 最適なPrefixを決定 ↓ PREFIX_VALに設定 ↓ make_name()経由で全データ名を生成
という設計にする。
```jsx
blender5 以降専用でアドオンを作る
アドオンの有効化と同時に**
「サイドパネル(Nパネル)が自動で開く」
「3Dビューがマテリアルプレビューに自動で切り替わる」**
機能を組み込み
その点は重要です。現在の要件では**「初期設定を管理する」**とは書かれていますが、**「ChatGPT が最初にコピー用コードとして出力する」**という運用ルールが十分に明記されていません。
追加するなら、次の要件を **「6. 初期設定」** の最後に入れるのがよいでしょう。
## 初期設定ブロックの出力ルール
新しい Blender 5 専用アドオンを作成する
# 作成日 年月日時分
# ===================================
# 4. 共通定義
# ===================================
ADDON_TITLE = "
PREFIX_VAL = ""
ADDON_CATEGORY = " "
PREFIX = PREFIX_VAL.lower()
適切な タイトル 変数を作る
コード本体を作成する前に、
**初期設定ブロック**をコピーできる形式で出力する。
この初期設定ブロックは、
Blender アドオンのコード内へそのまま貼り付けられる Python コードとし、
コードブロック形式で提示する。
### 目的
* 初期値を一覧で確認できるようにする。
* 初期値をコード作成前に調整できるようにする。
* コピー&ペーストだけでコードへ組み込めるようにする。
* 初期値を定義部で一元管理する。
### 出力形式
初期設定は、以下のような構成でカテゴリごとにまとめて出力する。
* 数値
* XYZ 座標
* 透明度
* テキスト設定
* 色(RGBA)
* その他の初期設定
### 出力ルール
* Python の代入文形式で出力する。
* コメントを含め、そのまま Blender アドオンのソースコードへ貼り付けられる形式とする。
* 1項目につき1行で記述する。
* コード中の変数名と完全に一致させる。
* ChatGPT はコード本体より先に、この初期設定ブロックを提示する。
* 利用者は必要に応じて値を編集し、そのままコードへ貼り付けられるものとする。
### 標準テンプレート
```python
# =========================================================
# 6. 初期設定
# =========================================================
# 数値
XXXXX_DEFAULT = ...
# XYZ
XXXXX_X_DEFAULT = ...
XXXXX_Y_DEFAULT = ...
XXXXX_Z_DEFAULT = ...
# 透明度
ALPHA_FRONT_DEFAULT = ...
ALPHA_BACK_DEFAULT = ...
# テキスト
TEXT_SIZE_DEFAULT = ...
TEXT_OFFSET_X_DEFAULT = ...
TEXT_OFFSET_Y_DEFAULT = ...
TEXT_OFFSET_Z_DEFAULT = ...
# 色 (R, G, B, A)
COLOR_MAIN = (...)
COLOR_SUB = (...)
この初期設定ブロックは、コード内のスタイルと同じ形式で出力し、コピー&ペーストだけで利用できることを標準仕様とする。
このルールを追加すれば、「初期値をコード本体にそのまま貼り付けられる形で最初に出力する」という運用が要件定義に明確に組み込まれます。