« C4D Python R12 テスト:グラデーションバーをちょっとだけ試してみる。 | トップページ | あぁ… »

C4D Python R12 テスト:スプライングラフを試してみた。

今回も、ヌルオブジェクトのユーザデータとして追加したスプライングラフで試してみる。

Splinedata_01

C4Dのヘルプには、スプライングラフの事は具体的に書いていないなぁ…
一番下の「ポイント数」ってなんだったけ?
忘れたから、今回は触れずに放っておく事にした。

まずは、スプライングラフから取得してみる。
始める前に、適当にポイントを増やしてみた。

Splinedata_02

Python
import c4d


def main():
    if not op:return

    sl_data = op[c4d.ID_USERDATA,1]
    if not isinstance(sl_data, c4d.SplineData):return

    #ノット数の取得
    knot_count = sl_data.GetKnotCount()
    print 'Knot', knot_count

    #ノットの取得
    knots = sl_data.GetKnots()
    for knot_id in xrange(knot_count):
        print knot_id, knots[knot_id]

    #補間されたスプライン値の取得
    for pos in xrange(11):
        print pos * 0.1, sl_data.GetPoint(pos * 0.1)

    #選択されたポイント数
    print 'SelectKnot', sl_data.GetSelectCount()

    #レンジの取得
    print sl_data.GetRange()

    #張力
    print sl_data.GetRound()

    print 'ok'


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

グラフのポイントもグラデーションバー同様「ノット」と言うようだ。

Knot 4
0 {'lFlags': 65536, 'vPos': Vector(0, 0, 0), 'bSelect': False}
1 {'lFlags': 196608, 'vPos': Vector(0.1, 0.955, 0), 'bSelect': False}
2 {'lFlags': 262144, 'vPos': Vector(0.522, 0.09, 0), 'bSelect': False}
3 {'lFlags': 131072, 'vPos': Vector(1, 1, 0), 'bSelect': False}
0.0 Vector(0, 0, 0)
0.1 Vector(0.1, 0.594, 0)
0.2 Vector(0.2, 0.637, 0)
0.3 Vector(0.3, 0.542, 0)
0.4 Vector(0.4, 0.443, 0)
0.5 Vector(0.5, 0.388, 0)
0.6 Vector(0.6, 0.409, 0)
0.7 Vector(0.7, 0.499, 0)
0.8 Vector(0.8, 0.64, 0)
0.9 Vector(0.9, 0.812, 0)
1.0 Vector(1, 1, 0)
SelectKnot 0
{'ymax': 1.0, 'xmax': 1.0, 'xmin': 0.0, 'ymin': 0.0, 'ysteps': 0.001, 'xsteps': 0.001}
0.0
ok

グラフを左右反転させる。

Python
import c4d


def main():
    if not op:return

    sl_data = op[c4d.ID_USERDATA,1]
    if not isinstance(sl_data, c4d.SplineData):return

    #左右反転
    sl_data.Mirror()

    #スプライングラフの更新
    op[c4d.ID_USERDATA,1] = sl_data
    print 'ok'


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

Splinedata_03

スプラインを上下反転させる。

Python
import c4d


def main():
    if not op:return

    sl_data = op[c4d.ID_USERDATA,1]
    if not isinstance(sl_data, c4d.SplineData):return

    #上下反転
    sl_data.Flip()

    #スプライングラフの更新
    op[c4d.ID_USERDATA,1] = sl_data
    print 'ok'


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

Splinedata_04

Yの値を最小にする。

Python
import c4d


def main():
    if not op:return

    sl_data = op[c4d.ID_USERDATA,1]
    if not isinstance(sl_data, c4d.SplineData):return

    #Yを最小にする
    sl_data.Minimum()

    #スプライングラフの更新
    op[c4d.ID_USERDATA,1] = sl_data
    print 'ok'


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

Splinedata_05

Yの値を最大にする。

Python
import c4d


def main():
    if not op:return

    sl_data = op[c4d.ID_USERDATA,1]
    if not isinstance(sl_data, c4d.SplineData):return

    #Yを最大にする
    sl_data.Maximum()

    #スプライングラフの更新
    op[c4d.ID_USERDATA,1] = sl_data
    print 'ok'


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

Splinedata_06

ノットを全て選択。

Python
import c4d


def main():
    if not op:return

    sl_data = op[c4d.ID_USERDATA,1]
    if not isinstance(sl_data, c4d.SplineData):return

    #ノットを全て選択
    sl_data.SelectAll()

    #スプライングラフの更新
    op[c4d.ID_USERDATA,1] = sl_data
    print 'ok'


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

Splinedata_07

値を設定する。

Python
import c4d
import random #pythonの乱数モジュール


def main():
    if not op:return

    sl_data = op[c4d.ID_USERDATA,1]
    if not isinstance(sl_data, c4d.SplineData):return

    #張力の設定
    sl_data.SetRound(0.75)

    #レンジの設定
    sl_data.SetRange(0.0, 2.0, 0.01, 0.0, 2.0, 0.01)
    print sl_data.GetRange()

    #ノットの挿入
    #ランダム位置の設定
    for c in xrange(5):
        knot_x = random.random()
        knot_y = random.random()
       
        sl_data.InsertKnot(knot_x, knot_y, 0)

    #ノット数の取得
    knot_count = sl_data.GetKnotCount()
    print knot_count

    #ノットの取得
    knots = sl_data.GetKnots()
    for knot_id in xrange(knot_count):
        print knot_id, knots[knot_id]



    #オブジェクトユーザデータに変更したスプラインデータを設定
    op[c4d.ID_USERDATA,1] = sl_data
    print 'ok'


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

{'ymax': 2.0, 'xmax': 2.0, 'xmin': 0.0, 'ymin': 0.0, 'ysteps': 0.0099999997764825821, 'xsteps': 0.0099999997764825821}
9
0 {'lFlags': 65536, 'vPos': Vector(0, 0, 0), 'bSelect': False}
1 {'lFlags': 589824, 'vPos': Vector(0.092, 0.735, 0), 'bSelect': False}
2 {'lFlags': 196608, 'vPos': Vector(0.1, 0.955, 0), 'bSelect': False}
3 {'lFlags': 327680, 'vPos': Vector(0.17, 0.452, 0), 'bSelect': False}
4 {'lFlags': 393216, 'vPos': Vector(0.287, 0.747, 0), 'bSelect': False}
5 {'lFlags': 458752, 'vPos': Vector(0.483, 0.186, 0), 'bSelect': False}
6 {'lFlags': 262144, 'vPos': Vector(0.522, 0.09, 0), 'bSelect': False}
7 {'lFlags': 524288, 'vPos': Vector(0.897, 0.599, 0), 'bSelect': False}
8 {'lFlags': 131072, 'vPos': Vector(1, 1, 0), 'bSelect': False}
ok

Splinedata_08

今回は、ここで終了。
削除やソート等のノードもありますので試してみてください。

|

« C4D Python R12 テスト:グラデーションバーをちょっとだけ試してみる。 | トップページ | あぁ… »

コメント

コメントを書く



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




« C4D Python R12 テスト:グラデーションバーをちょっとだけ試してみる。 | トップページ | あぁ… »