トックのCG部屋-トップ別室へ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

プログラミングメモ(Blenderでプロパティを追加してUIで編集するAddonサンプル)

Blenderで自分のレンダラ用に新しいパラメータを追加したかったんだけど
デフォルトのカスタムパラメータはいちいち追加しなきゃいけないし
ってことでアドオンを作ってデータを拡張しましょうというお話
最低限どうすればいいかを書いてくよ


こんな感じになるよ

追加プロパティサンプル

いつもどおり追記で


下のスクリプトはObjectに対して新しいプロパティを追加して,
上の画像みたいにBlenderのUI上で編集できる様にするもの

  • Objectにプロパティを追加する
  • プロパティをUIにバインドする

の2つのコードからできてる
あとはアドオンとして登録する部分か


まぁこれだけだとただ単にパラメータを追加するだけだから
特に何かができるものじゃないけど
ここで設定したパラメータを使って更に別のスクリプトで処理したり,
何かにエクスポートして使ったりとかいろいろ使える

サンプルコード

bl_info = {
    "name": "Prop Sample",
    "description": "Sample Script",
    "category": "User"}

import bpy

from bpy.props import (BoolProperty,
                       FloatProperty,
                       FloatVectorProperty,
                       StringProperty,
                       PointerProperty)

class SampleProperties(bpy.types.PropertyGroup):
    boolSample = BoolProperty()
    floatSample = FloatProperty(name="FloatPropSample",min=-1.00, max=1.00, default=0.0)
    floatVectorSample = FloatVectorProperty(name="Vector")
    stringSample=StringProperty(name="text")


class SampleUI_PT_object(bpy.types.Panel):
    bl_label = "UI For Sample Prop"
    bl_context = "object"
    bl_space_type = "PROPERTIES"
    bl_region_type = "WINDOW"

    @classmethod
    def poll(cls, context):
        return context.object

    def draw(self, context):
        self.layout.prop(context.object.sample_props,"boolSample")
        self.layout.prop(context.object.sample_props,"floatSample")
        self.layout.prop(context.object.sample_props,"floatVectorSample")
        self.layout.prop(context.object.sample_props,"stringSample")


def register():
    bpy.utils.register_module(__name__)
    bpy.types.Object.sample_props=PointerProperty(type=SampleProperties)

def unregister():
    bpy.utils.unregister_module(__name__)
    del bpy.types.Object.sample_props

objectとかmaxとかピンクでハイライトされてるのは別に関係ない


3年ぐらい前にも同じような話題を書いたけど
今とちょっと違うところもあるかもしれないから一応全部解説

あの頃よりはまだ理解ができたけど
まぁ相変わらず既存のスクリプト見ながら何が必要かを抽出した感じ
その後は推論とドキュメントで応用ですね

登録部分

bl_info

これは相変わらず

  • name :アドオンの名前
  • description :説明
  • category :Addon登録画面でのカテゴリ

前と同じならnameとcategoryは必須なはず
少なくともこれを入れておけば登録できる

後は作者やwikiのURLやアドオンのバージョン,Blenderのバージョンなどなどあるけど
2.7のページが見つからないから2.5でのリンクを貼っておく

def register()/def unregister()

アドオンとして登録されるとき,削除される時に呼ばれる関数
アドオンの初期化処理はここ

bpy.utils.register_module(__name__)とbpy.utils.unregister_module(__name__)でBlenderに登録している

まぁつまりここまでおまじないってことで

アドオンが大きくなってファイルを分けなきゃいけない時はモジュールの__ini__.pyに書いておけばいい


プロパティの追加

class SampleProperties(bpy.types.PropertyGroup)

新しくbpy.types.PropertyGroupのサブクラスを作って
bpy.propの中にある関数を使ってクラス変数に新しい変数を追加していく
関数は別に引数なしでも使えるけどUIに表示するラベル名だったり説明を引数で与えることができる

どんなプロパティがあるかは下のリンク
Property Definitions (bpy.props)
というかここ見れば全部わk(ry

bpy.types.Object.sample_props=PointerProperty(type=SampleProperties)

上で作ったプロパティグループをtypeに追加する.
ここではObjectの中にsample_propsという変数として上で作った型を追加する

今回はオブジェクトに追加したからこういうコードになってるけど
bpy.types.Material.○○にすればマテリアルに追加できるし
多分bpy.typesの下に入ってるものには何でもくっつけられると思う

del bpy.types.Object.sample_props

アドオンが破棄されるときには登録した時に追加したものもちゃんと破棄しましょうというお話
こういうところをしっかり書いておかないといろいろ面倒なことになるのよね


ここまででとりあえずObjectに新しいプロパティが追加される
実際に一つ何かオブジェクトを作ってコマンドラインからその中身を見ると

追加されたプロパティ

という感じでしっかりと変数が追加されている

UIの追加

class SampleUI_PT_object(bpy.types.Panel)

パネルのクラス
プロパティと違ってこっちは読み込まれた時点でクラス変数見て勝手に色々やってくれるのか
特に関数で登録とかはなくてとりあえず定義しておけばいい

bl_label

パネルのラベル

bl_context / bl_space_type / bl_region_type

ここでどこに配置されるかとか書いてるらしい(適当)
今回のだとbl_space_typeがPROPERTIESで所謂ボタンウィンドウ

書いてる途中

  1. 2014/11/09(日) 17:14:11|
  2. Blender
  3. | トラックバック:0
  4. | コメント:0
<<ヤマト2199星巡る方舟 | ホーム | 絵的には殆ど変わらない>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://took.blog72.fc2.com/tb.php/877-23c405dd
この記事にトラックバックする(FC2ブログユーザー)

プロフィール

Author:トック

プロフィール(仮)

twitter:elgraiv_took
└ブログ更新情報

twitter:elgraiv_take
└無駄な日常つぶやき用

FC2カウンター

コンテンツ一覧

本棚

最近の記事

カテゴリー

月別アーカイブ

ブログ内検索

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。