« C4D Python R12 テスト:utils.GeRayColliderでポリゴンとの交点が1個のはずが2個あったのは? | トップページ | いつの間にか、C4D Python SDKが更新されている… »

C4D Python R12 テスト:ユーザデータ付きのヌルオブジェクトを生成してシーンに追加してみる。

まぁ、毎回同じユーザデータ群を「ユーザデータを追加.../管理...」で設定するのも面倒だ…
なんて思うことはあるよね…

Add_userdata_01

そんな事で「C4D Pythonを使おうよ。」、って事ではないんだけど…

いつかは、役に立つ日が来るかと…

では、C4D Pythonでヌルオブジェクトを生成して、ベクトル型と浮動小数型のユーザデータ2個を取り付けてみる。

Python
'''
ユーザデータ付きヌルオブジェクトを生成してみた。
'''

import c4d


def main():
    null_obj = c4d.BaseObject(c4d.Onull) #ヌルオブジェクトの作成
    doc.InsertObject(null_obj) #ヌルオブジェクトをシーンに追加

    #ヌルオブジェクトの1つ目にベクトル型のユーザデータを設定し取り付ける
    u_container_1 = c4d.GetCustomDatatypeDefault(c4d.DTYPE_VECTOR) #ベクトル型のデフォルトセッティングコンテナの取得
    u_container_1[c4d.DESC_NAME] = 'testVector' #ユーザデータの名前を変更
    u_data_1 = null_obj.AddUserData(u_container_1) #ヌルオブジェクトにユーザデータを追加
    null_obj[u_data_1] = c4d.Vector(10.1, 20.2, 30.3) #値の設定

    #ヌルオブジェクトの2つ目に浮動小数型のユーザデータを設定し取り付ける
    u_container_2 = c4d.GetCustomDatatypeDefault(c4d.DTYPE_REAL) #浮動小数型のデフォルトセッティングコンテナの取得
    u_container_2[c4d.DESC_NAME] = 'testFloat' #ユーザデータの名前を変更
    u_data_2 = null_obj.AddUserData(u_container_2) #ヌルオブジェクトにユーザデータを追加
    null_obj[u_data_2] = 40.4 #値の設定


if __name__=='__main__':
    main()
    c4d.EventAdd()

実行すると、ユーザデータが取り付けられたヌルオブジェクトが追加されます。

Add_userdata_02

ユーザデータのタイプは…

Add_userdata_03

全部が設定可能なのかな…?

任意のデータタイプのセッティングコンテナを取得する関数…
データタイプを指定する。

setting_container = c4d.GetCustomDatatypeDefault(type)
c4d.DTYPE_NONE ???
c4d.DTYPE_CHILDS ???
c4d.DTYPE_GROUP グループ
c4d.DTYPE_COLOR カラー
c4d.DTYPE_SUBCONTAINER ???
c4d.DTYPE_MULTIPLEDATA ???
c4d.DTYPE_TEXTURE テクスチャ
c4d.DTYPE_BUTTON ???
c4d.DTYPE_DYNAMIC ???
c4d.DTYPE_SEPARATOR セパレータ
c4d.DTYPE_STATICTEXT ???
c4d.DTYPE_POPUP ???
c4d.DTYPE_LONG 整数
c4d.DTYPE_REAL 浮動小数
c4d.DTYPE_TIME 時間
c4d.DTYPE_VECTOR ベクトル
c4d.DTYPE_MATRIX マトリックス
c4d.DTYPE_STRING 文字
c4d.DTYPE_FILENAME ファイル名
c4d.DTYPE_BASELISTLINK リンク
c4d.DTYPE_BOOL ブール値
c4d.DTYPE_NORMAL ???

C4D Pythonで設定してユーザデータとして出現するも、「ユーザデータを管理...」で'???'の部分は、データタイプを確認できませんでした。
そのうちね…

ユーザデータの名前の設定をしているけど…

    u_container_1[c4d.DESC_NAME] = 'testVector'

省略すると、'???' に、なってしまう。

Add_userdata_05

セッティングコンテナに設定できる項目… 今回調べた分ね…

c4d.DESC_NAME 名前
c4d.DESC_SHORT_NAME 略称
c4d.DESC_ANIMATE アニメーション可能
c4d.DESC_UNIT 単位
c4d.DESC_UNIT_DEGREE
c4d.DESC_UNIT_LONG 整数
c4d.DESC_UNIT_METER メートル
c4d.DESC_UNIT_PERCENT パーセント
c4d.DESC_UNIT_REAL 実数
c4d.DESC_UNIT_TIME 時間
c4d.DESC_STEP ステップ
c4d.DESC_MIN 最小:最小
c4d.DESC_MAX 最大:最大
c4d.DESC_MINSLIDER スライダー最小:最小
c4d.DESC_MAXSLIDER スライダー最大:最大
c4d.DESC_DEFAULT デフォルト

オブジェクトにユーザデータを取り付けるメソッド…
c4d.GetCustomDatatypeDefault()で取得したセッティングコンテナを指定する。
返ってくるものは、取り付けたユーザデータを識別するc4d.DescID

description_elements = BaseList2D.AddUserData(setting_container)

この返って来たc4d.DescIDをオブジェクトに指定してユーザデータの値を変更する…

obj[description_elements] = value

そう言えば…
ユーザデータの値にアクセスするには、属性マネージャからユーザデータの項目をスクリプトマネージャにドロップしてたよね…

Add_userdata_04

obj[c4d.ID_USERDATA, 1]

と、言う事は[description_elements]と[c4d.ID_USERDATA, 1]は同じものか?

コンソールに表示してみた…
前後省略…

             :

    print [description_elements]
    print [c4d.ID_USERDATA, 1]

             :
[(1, 23, 0)]
[700, 1]

違うものだよね…
そりゃそうか…

|

« C4D Python R12 テスト:utils.GeRayColliderでポリゴンとの交点が1個のはずが2個あったのは? | トップページ | いつの間にか、C4D Python SDKが更新されている… »

コメント

コメントを書く



(ウェブ上には掲載しません)




« C4D Python R12 テスト:utils.GeRayColliderでポリゴンとの交点が1個のはずが2個あったのは? | トップページ | いつの間にか、C4D Python SDKが更新されている… »