« C4D Python R13 テスト:複製したマテリアルにレイヤを設定 | トップページ | MoGraphを習得しようかと… »

C4D Python R13 テスト:レイヤ設定を試してみた。

単純にレイヤをC4D Pythonで試してみた。
レイヤ自体の使い方はヘルプ読んでみて…
あ、BodyPaintの方じゃないのだ…

レイヤマネージャを開き適当にレイヤを4個追加した。

Layer_01

マネージャの「ファイル」メニューの「新規レイヤ」で追加した。
レイヤマネージャの空いているエリアで、ダブルクリックでも新規レイヤを追加できるのか…

レイヤーリストもツリー構造が可能なようだ。

Layer_02

さて、レイヤオブジェクトの取得の方法はどうだろう?

オブジェクトならば…

BaseDocument.GetFirstObject() オブジェクトマネージャのリストの最初のオブジェクト
BaseDocument.GetActiveObject() 1個だけ選択された場合の選択オブジェクト
BaseDocument.GetActiveObjects() 1個以上選択された場合の選択オブジェクト
BaseDocument.SearchObject() オブジェクト名で検索
BaseDocument.SearchObjectInc() 含むオブジェクト名で検索

レイヤの場合は、C4D Python SDKをザッと目を通したけど直接レイヤを取得するメソッドは見当たらなかった。

BaseDocument.GetLayerObjectRoot() レイヤリストのルート(BaseList2D 'GeListHead')を取得
BaseDocument.GetLayerObject() オブジェクトやマテリアル等から設定されているレイヤを取得

BaseDocument.GetLayerObjectRoot()でレイヤーリストのルート「GeListHead」を取得し、更にその下のレイヤ(LayerObject)をBaseList2D.GetDown()等で取得する。

レイヤはBaseList2Dクラスを継承したLayerObjectクラスで、documentsモジュールに含まれている。

レイヤリストは、こんな具合かな…

Layer_03_3

ま、とりあえず「レイヤ D」を取得して、ソロ/エディタでの表示/レンダリング/マネージャでの表示/レイヤをロック/アニメーション/ジェネレータ/デフォーマ/エクスプレッションを操作してみようと思う。

まずは、「レイヤ D」を取得しレイヤの状態をコンソールに表示してみる。

Python
import c4d


def main():
    LR =  doc.GetLayerObjectRoot()  #レイヤリストのルートを取得
    layerD = LR.GetDown().GetDown() #ルート下の「レイヤ A」、更に下の「レイヤ D」を取得
   
    print layerD                    #「レイヤ D」を表示
    print layerD.GetLayerData(doc)  #「レイヤ D」のデータを表示

if __name__=='__main__':
    main()

「レイヤ D」の取得方法は、ちょっと強引だけど…
結果は、こんな具合。

<c4d.documents.LayerObject object called 'レイヤ D/レイヤ' with ID 100004801 at 0x00000000110C4250>
{'solo': False, 'locked': False, 'render': True, 'color': Vector(0.933, 0.372, 0.997), 'manager': True, 'animation': True, 'generators': True, 'deformers': True, 'expressions': True, 'view': True}

データの並びは、マネージャ上の並びとは違います。それは全く問題ではないね。

レイヤのデータを取得は、LayerObjectのメソッドではなくBaseList2Dのメソッドなんだね。
レイヤデータはPythonの辞書オブジェクト。

BaseList2D.GetLayerData() レイヤオブジェクトのデータを取得

では、「レイヤ D」の「エディタでの表示」と「エクスプレッション」をoffにしてみよう。

Python
import c4d


def main():
    LR =  doc.GetLayerObjectRoot()   #レイヤリストのルートを取得
    layerD = LR.GetDown().GetDown()  #ルート下の「レイヤ A」、更に下の「レイヤ D」を取得
   
    datas = layerD.GetLayerData(doc)
    datas['view'] = False            #エディタでの表示をoff
    datas['expressions'] = False     #エクスプレッションをoff
   
    layerD.SetLayerData(doc, datas)  #レイヤーへデータの設定
   
    c4d.EventAdd()

if __name__=='__main__':
    main()

レイヤへのデータの設定も、BaseList2Dのメソッドなんだね。

BaseList2D.SetLayerData() レイヤオブジェクトにデータを設定

実行前

Layer_02

実行後

Layer_04

「レイヤ D」の「エディタでの表示」と「エクスプレッション」がoffになっているので問題ないかと思う。
レイヤマネジャでのグレー表示が微妙で、パッと見わかりづらいけど…

|

« C4D Python R13 テスト:複製したマテリアルにレイヤを設定 | トップページ | MoGraphを習得しようかと… »

コメント

コメントを書く



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




« C4D Python R13 テスト:複製したマテリアルにレイヤを設定 | トップページ | MoGraphを習得しようかと… »