« C4D スクリプトを公開しているユーザさんがいるよ… | トップページ | C4D Python R12 テスト:ポイントを円形に配置して円形スプライン作ってみる。 »

C4D Python R12 テスト:生成したスプラインにセグメントを設定してみる。

以前、C4D Pythonでスプラインを生成したときには、セグメントを設定していませんでした。
http://villager-and-c4d.cocolog-nifty.com/blog/2011/02/c4d-python-r1-8.html

今回は、前回のコードにセグメントを作成するコードを追加しました。

Python
"""
スプラインオブジェクトの生成とセグメントの設定。
2011.3.7
"""


import c4d


def CreateSplineObject():
    obj = c4d.BaseObject(c4d.Ospline) #スプラインオブジェクトのアロケート
    obj.ResizeObject(19) #ポイント数の設定。

    #ポイントの作成
    obj.SetPoint( 0, c4d.Vector(-100.0,  0.0,  300.0))
    obj.SetPoint( 1, c4d.Vector(-100.0,  0.0,  100.0))
    obj.SetPoint( 2, c4d.Vector(-300.0,  0.0,    0.0))
    obj.SetPoint( 3, c4d.Vector(   0.0,  0.0, -600.0))
    obj.SetPoint( 4, c4d.Vector( 300.0,  0.0,    0.0))
    obj.SetPoint( 5, c4d.Vector( 100.0,  0.0,  100.0))
    obj.SetPoint( 6, c4d.Vector( 100.0,  0.0,  300.0))
   
    obj.SetPoint( 7, c4d.Vector(-100.0,  0.0,  500.0))
    obj.SetPoint( 8, c4d.Vector(-100.0,  0.0,  400.0))
    obj.SetPoint( 9, c4d.Vector( 100.0,  0.0,  400.0))
    obj.SetPoint(10, c4d.Vector( 100.0,  0.0,  500.0))
   
    obj.SetPoint(11, c4d.Vector(-100.0,  0.0,  666.0))
    obj.SetPoint(12, c4d.Vector(-100.0,  0.0,  600.0))
    obj.SetPoint(13, c4d.Vector( 100.0,  0.0,  600.0))
    obj.SetPoint(14, c4d.Vector( 100.0,  0.0,  666.0))
   
    obj.SetPoint(15, c4d.Vector(-100.0,  0.0,  799.0))
    obj.SetPoint(16, c4d.Vector(-100.0,  0.0,  766.0))
    obj.SetPoint(17, c4d.Vector( 100.0,  0.0,  766.0))
    obj.SetPoint(18, c4d.Vector( 100.0,  0.0,  799.0))
   
    #セグメントの作成
    #セグメント数4を指定してSegmentTagを取り付る。
    #各セグメントのポイント数を設定する。

    obj.MakeVariableTag(c4d.Tsegment, 4)
    obj.SetSegment(0, 7, True)
    obj.SetSegment(1, 4, True)
    obj.SetSegment(2, 4, True)
    obj.SetSegment(3, 4, True)
   
    #スプラインを閉じる
    obj[c4d.SPLINEOBJECT_CLOSED] = True
   
    #オブジェクトの更新
    obj.Message(c4d.MSG_UPDATE)
    return obj



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



if __name__=='__main__':
    main()

Createspline_02

スプラインのセグメントは、スプラインオブジェクトに取り付けられたSegmentTagに記録されています。
このSegmentTagは不可視のタグでVariableTagです。

Pythonでの通常のタグの取り付けは、以前にテストしましたので、そちらを試してください。
http://villager-and-c4d.cocolog-nifty.com/blog/2011/02/c4d-python-r-10.html

今回のSegmentTagの取り付けは…

BaseObject.MakeVariableTag()

引数は、VariableTagの種類とデータ数(スプラインセグメントの場合はセグメント数)の2つです。

スプラインのセグメントの設定は…

SplineObject.SetSegment()

引数は、セグメント番号とセグメントのポイント数、closedのフラグの3つです。

セグメントの総ポイント数とスプラインの総ポイント数に注意してください。
ポイント数が合っていないと、スプラインオブジェクトとして整合性が取れなく、表示に影響が出るようですが…
具体的に試していないので、どの様な不具合が生じるかは定かではありません。

|

« C4D スクリプトを公開しているユーザさんがいるよ… | トップページ | C4D Python R12 テスト:ポイントを円形に配置して円形スプライン作ってみる。 »

コメント

コメントを書く



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




« C4D スクリプトを公開しているユーザさんがいるよ… | トップページ | C4D Python R12 テスト:ポイントを円形に配置して円形スプライン作ってみる。 »