Propertyを追加する
Blender では、Mesh や Camera、Material 等プロジェクトを構成するデータは Data Block と呼ばれる単位で
扱われます。
そのデータは、 Data API で確認することができて、各 Type 以下に Data-Block があります。
たとえば、Objects の場合。
Objects 以下にはプロジェクトに含まれる Objects の Data-Block があります。
この Data-block に、この DataType を構成するための Property があります。
Blender ではこの Data-block を Add-on で拡張することができて
何かしら処理を実行したい場、Property を指定し
GUI から変更するできるようにパネルを用意することで、様々なツールを作ることができます。
Property を追加する¶
基本¶
Data-Block は、プログラミング的に言うとクラスのインスタンスのようなもので
指定の型(bpy.types ) をひな形として作成されるオブジェクトです。
1 |
|
Types(bpy.types)を確認すると、types の中に ID を継承した型があるのがわかります。
これらが、Data-Block の元になるタイプなので、
拡張する場合は、この bpy.types に指定の名前の property を用意し、作成したい型の Property Definitions (bpy.props) を代入します。
ObjectType に対して hoge の IntProperty を追加しました。
1 2 3 4 |
|
types に追加されると、Data-Block に Property が追加され、取得したり代入したりすることが可能になります。
ある Data-Block への参照¶
Property には、Int や Float のような値以外に
別の Data-Block への参照を定義することができます。
(Object への Data 指定、Material の Assing 情報なども同様の方法で定義されています)
1 |
|
PointerProperty は、指定の Type を指定すると
その Type の Data-Block を指定できるようになります。
PointerProperty を定義すると、このように特定の Type への接続口が作成されます。
1 |
|
その作成した PointerProperty に、指定の Type の Data-Block を代入すると
リンクが作成できました。
Property から、指定の Data-Block を取得できました。
PropertyGroup¶
最後に、PropertyGroup を使用すると、Property を1つの構造体として定義することができます。
1 2 3 4 5 |
|
作成するには、bpy.types.PropertyGroup を継承したクラスに
クラス変数として Property を定義します。
( : は Python3 の型指定をするためのもの)
1 |
|
そして、追加したい Type に対して POinterProperty で PropertyGroup を追加します。
1 |
|
PropertyGroup を作成すると、このように groupName.prop のような
グループ階層を追加することができます。
Addon で追加する¶
Blender の Addon で追加する場合は
のように、 クラス定義と Property への登録処理をする構造を
作成すれば OK です。