« C4D Python R12 テスト:セグメントに分断されているスプラインを全部連結させようと… | トップページ | C4D Python R12 テスト:スプラインのポイントを選択したポイントから6個おきに選択するよ。 »

C4D Python R12 テスト:前回諦めてしまった、スプラインのセグメントをSetSegment()で再設定する

前回、SplineObject.SetSegment()を使っての再設定を諦めて、SendModelingCommand()を使って操作しましたが…

もう一度…

そう言えば…
以前にスプラインを生成してセグメントも設定する記事を書きました。
http://villager-and-c4d.cocolog-nifty.com/blog/2011/03/c4d-python-r1-2.html

これで、できるんですね…
すっかり忘れていました。

スプラインのセグメントは、不可視のセグメントタグに記録されています。
このタグは何度設定してもスプラインオブジェクトに1個のみしか取り付けられません。

この事を利用しました。

Python
'''
スプラインのセグメントをSetSegment()で再設定するテスト
'''


import c4d

def main():
    if not isinstance(op, c4d.SplineObject):return

    #勝手ではありますが、セグメントを2または3に再設定するために、ポイント数が2と3の最小公倍数6未満の時は終了とさせていただきます。
    pnt_cnt = op.GetPointCount()
    if pnt_cnt < 6:return

    #現在のセグメント数が3でなければ、新しく設定するセグメント数を3に
    #セグメント数が3の場合は、セグメント数を2に設定する

    seg_cnt = op.GetSegmentCount()
    if seg_cnt != 3:
        new_seg_cnt = 3
    else:
        new_seg_cnt = 2

    #新しいセグメント数を設定したセグメントタグを新規で取り付ける
    #セグメントタグは、テクスチャタグ等と違い、オブジェクトには1つしか取り付けられない事を利用しています。

    op.MakeVariableTag(c4d.Tsegment, new_seg_cnt)

    #セグメントを2または3で再設定する
    if new_seg_cnt == 2:
        op.SetSegment(0,            pnt_cnt / 2, False)
        op.SetSegment(1, pnt_cnt -  pnt_cnt / 2, False)
    else:
        op.SetSegment(0,            pnt_cnt / 3,    False)
        op.SetSegment(1,            pnt_cnt / 3,    False)
        op.SetSegment(2, pnt_cnt - (pnt_cnt / 3)*2, False)


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

現在のスプラインオブジェクトのセグメント数が、3ではない場合3に設定
3の場合は2に設定します。

Python_splinsegalljoin_09

要するに、実行するたびセグメント数を3と2で再設定を繰り返します。
実行してもエラーは無いですが、完璧なのかはわかりません。
「C4D Python R12 テスト:~」の記事は、あくまでもテストなので試すときは充分注意を払ってくださいね。

|

« C4D Python R12 テスト:セグメントに分断されているスプラインを全部連結させようと… | トップページ | C4D Python R12 テスト:スプラインのポイントを選択したポイントから6個おきに選択するよ。 »

コメント

コメントを書く



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




« C4D Python R12 テスト:セグメントに分断されているスプラインを全部連結させようと… | トップページ | C4D Python R12 テスト:スプラインのポイントを選択したポイントから6個おきに選択するよ。 »