« C4D Python R12 テスト:SendModelingCommand()でアレンジを試してみる。 | トップページ | C4D Python R12 テスト:スプラインオブジェクトを生成してみる。 »

C4D Python R12 テスト:ポリゴンオブジェクトを生成してみる。

C4D ユーザは、Pythonをどう言う具合に使っているんだろう…
Web検索しても、いまいち情報が少ない。と言うよりも無い。
ただ、海外のユーザは使っているんだろうけど。

もしかしてモーショングラフィックス系で、モーションの制御で使われているのだろうか?

今回は、スクリプトでポリゴンオブジェクトの生成のテストです。
ポリゴンオブジェクトをアロケートして、ポイント設定、ポリゴン設定、シーンに追加と言う流れ。
コード自体はシンプルです。

オブジェクトのアロケートタイプは、
http://villager-and-c4d.cocolog-nifty.com/blog/coffee-allocobject.html

でも、スクリプトでポリゴンオブジェクトの生成をする事があるだろうか?

Python

"""
ポリゴンオブジェクトの生成。
2011.2.13
"""


import c4d


def CreatePolygonObject():
    obj = c4d.BaseObject(c4d.Opolygon) #ポリゴンオブジェクトのアロケート
    obj.ResizeObject(24, 22) #ポイントとポリゴン数の設定。

    #ポイントの作成
    obj.SetPoint( 0, c4d.Vector( 300.0,  25.0,  200.0))
    obj.SetPoint( 1, c4d.Vector( 200.0,  25.0,  300.0))
    obj.SetPoint( 2, c4d.Vector(   0.0,  25.0,  100.0))
    obj.SetPoint( 3, c4d.Vector(-200.0,  25.0,  300.0))
    obj.SetPoint( 4, c4d.Vector(-300.0,  25.0,  200.0))
    obj.SetPoint( 5, c4d.Vector(-100.0,  25.0,    0.0))
    obj.SetPoint( 6, c4d.Vector(-300.0,  25.0, -200.0))
    obj.SetPoint( 7, c4d.Vector(-200.0,  25.0, -300.0))
    obj.SetPoint( 8, c4d.Vector(   0.0,  25.0, -100.0))
    obj.SetPoint( 9, c4d.Vector( 200.0,  25.0, -300.0))
    obj.SetPoint(10, c4d.Vector( 300.0,  25.0, -200.0))
    obj.SetPoint(11, c4d.Vector( 100.0,  25.0,    0.0))
    obj.SetPoint(12, c4d.Vector( 300.0, -25.0,  200.0))
    obj.SetPoint(13, c4d.Vector( 200.0, -25.0,  300.0))
    obj.SetPoint(14, c4d.Vector(   0.0, -25.0,  100.0))
    obj.SetPoint(15, c4d.Vector(-200.0, -25.0,  300.0))
    obj.SetPoint(16, c4d.Vector(-300.0, -25.0,  200.0))
    obj.SetPoint(17, c4d.Vector(-100.0, -25.0,    0.0))
    obj.SetPoint(18, c4d.Vector(-300.0, -25.0, -200.0))
    obj.SetPoint(19, c4d.Vector(-200.0, -25.0, -300.0))
    obj.SetPoint(20, c4d.Vector(   0.0, -25.0, -100.0))
    obj.SetPoint(21, c4d.Vector( 200.0, -25.0, -300.0))
    obj.SetPoint(22, c4d.Vector( 300.0, -25.0, -200.0))
    obj.SetPoint(23, c4d.Vector( 100.0, -25.0,    0.0))

    #ポリゴンの作成
    obj.SetPolygon( 0, c4d.CPolygon( 0,  1, 13, 12))
    obj.SetPolygon( 1, c4d.CPolygon( 1,  2, 14, 13))
    obj.SetPolygon( 2, c4d.CPolygon( 2,  3, 15, 14))
    obj.SetPolygon( 3, c4d.CPolygon( 3,  4, 16, 15))
    obj.SetPolygon( 4, c4d.CPolygon( 4,  5, 17, 16))
    obj.SetPolygon( 5, c4d.CPolygon( 5,  6, 18, 17))
    obj.SetPolygon( 6, c4d.CPolygon( 6,  7, 19, 18))
    obj.SetPolygon( 7, c4d.CPolygon( 7,  8, 20, 19))
    obj.SetPolygon( 8, c4d.CPolygon( 8,  9, 21, 20))
    obj.SetPolygon( 9, c4d.CPolygon( 9, 10, 22, 21))
    obj.SetPolygon(10, c4d.CPolygon(10, 11, 23, 22))
    obj.SetPolygon(11, c4d.CPolygon(11,  0, 12, 23))
   
    obj.SetPolygon(12, c4d.CPolygon( 2,  1,  0, 11))
    obj.SetPolygon(13, c4d.CPolygon( 5,  4,  3,  2))
    obj.SetPolygon(14, c4d.CPolygon( 8,  7,  6,  5))
    obj.SetPolygon(15, c4d.CPolygon(11, 10,  9,  8))
    obj.SetPolygon(16, c4d.CPolygon( 8,  5,  2, 11))
   
    obj.SetPolygon(17, c4d.CPolygon(12, 13, 14, 23))
    obj.SetPolygon(18, c4d.CPolygon(15, 16, 17, 14))
    obj.SetPolygon(19, c4d.CPolygon(18, 19, 20, 17))
    obj.SetPolygon(20, c4d.CPolygon(21, 22, 23, 20))
    obj.SetPolygon(21, c4d.CPolygon(23, 14, 17, 20))

    #オブジェクトの更新
    obj.Message(c4d.MSG_UPDATE)
    return obj



def main():
    plyobj = CreatePolygonObject()
   
    #シーンに追加
    doc.InsertObject(plyobj, None, None, True)
   
    c4d.EventAdd()



if __name__=='__main__':
    main()

説明するまでもありませんね。

Py_polygonobjectcreate_01

既にポリゴンオブジェクトにポイント、ポリゴンが設定されているオブジェクトに対して、PointObject.ResizeObject()を実行すると、C4Dが強制終了しました。
ポリゴンオブジェクトには、必ずPolygonObject.ResizeObject()を使用しなければいけないのだろうか?

Python

"""
ポリゴンオブジェクトの生成。
2011.2.13
"""


import c4d


def CreatePolygonObject():
    obj = c4d.BaseObject(c4d.Opolygon)
    obj.ResizeObject(24, 22)

    #ポイントの作成
    pt = [[ 300.0,  25.0,  200.0],
          [ 200.0,  25.0,  300.0],
          [   0.0,  25.0,  100.0],
          [-200.0,  25.0,  300.0],
          [-300.0,  25.0,  200.0],
          [-100.0,  25.0,    0.0],
          [-300.0,  25.0, -200.0],
          [-200.0,  25.0, -300.0],
          [   0.0,  25.0, -100.0],
          [ 200.0,  25.0, -300.0],
          [ 300.0,  25.0, -200.0],
          [ 100.0,  25.0,    0.0],
          [ 300.0, -25.0,  200.0],
          [ 200.0, -25.0,  300.0],
          [   0.0, -25.0,  100.0],
          [-200.0, -25.0,  300.0],
          [-300.0, -25.0,  200.0],
          [-100.0, -25.0,    0.0],
          [-300.0, -25.0, -200.0],
          [-200.0, -25.0, -300.0],
          [   0.0, -25.0, -100.0],
          [ 200.0, -25.0, -300.0],
          [ 300.0, -25.0, -200.0],
          [ 100.0, -25.0,    0.0]]

    for c in xrange(24):
        obj.SetPoint(c, c4d.Vector(pt[c][0], pt[c][1], pt[c][2]))

    #ポリゴンの作成
    pl = [[ 0,  1, 13, 12],
          [ 1,  2, 14, 13],
          [ 2,  3, 15, 14],
          [ 3,  4, 16, 15],
          [ 4,  5, 17, 16],
          [ 5,  6, 18, 17],
          [ 6,  7, 19, 18],
          [ 7,  8, 20, 19],
          [ 8,  9, 21, 20],
          [ 9, 10, 22, 21],
          [10, 11, 23, 22],
          [11,  0, 12, 23],
   
          [ 2,  1,  0, 11],
          [ 5,  4,  3,  2],
          [ 8,  7,  6,  5],
          [11, 10,  9,  8],
          [ 8,  5,  2, 11],
   
          [12, 13, 14, 23],
          [15, 16, 17, 14],
          [18, 19, 20, 17],
          [21, 22, 23, 20],
          [23, 14, 17, 20]]
   
    for c in xrange(22):
        obj.SetPolygon(c, c4d.CPolygon(pl[c][0], pl[c][1], pl[c][2], pl[c][3]))

    #オブジェクトの更新
    obj.Message(c4d.MSG_UPDATE)
    return obj



def main():
    plyobj = CreatePolygonObject()
   
    #シーンに追加
    doc.InsertObject(plyobj, None, None, True)
   
    c4d.EventAdd()



if __name__=='__main__':
    main()

こんな感じでも良いんだね。

|

« C4D Python R12 テスト:SendModelingCommand()でアレンジを試してみる。 | トップページ | C4D Python R12 テスト:スプラインオブジェクトを生成してみる。 »

コメント

コメントを書く



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




« C4D Python R12 テスト:SendModelingCommand()でアレンジを試してみる。 | トップページ | C4D Python R12 テスト:スプラインオブジェクトを生成してみる。 »