C4D.Python: ポリゴンオブジェクトの作成

これまでは、プリミティブやジェネレータの組み合わせだけを行ってきましたが、今回はPythonジェネレータでポリゴンオブジェクトをゼロから作成します。これとユーザデータの組み合わせを使えば、オリジナルの窓ジェネレータなども作れそうです。



プログラムによるポリゴンの作成方法

ポリゴンの作成は、手順的には手でポリゴンモデルを作成する方法と全く同じで、「ポイントを打って、ポリゴンを貼る」という手順になります。今回はできるだけ簡単にするために下記のような四角ポリゴンを作成してみます。

作成したコード

上記のポイント情報を元に作成したコードがこちらです。

import c4d
#Welcome to the world of Python


def main():
    #空のポリゴンオブジェクトを作成
    polyobj = c4d.BaseObject(c4d.Opolygon)
    
    #ポリゴンオブジェクトにポイントとポリゴンの数を指定して作成
    polyobj.ResizeObject(4,1)
    
    #ポイントの座標を指定
    polyobj.SetPoint(0,c4d.Vector(0,0,0))
    polyobj.SetPoint(1,c4d.Vector(0,100,0))
    polyobj.SetPoint(2,c4d.Vector(100,100,0))
    polyobj.SetPoint(3,c4d.Vector(100,0,0))
    
    #ポリゴンの作成するポイント順を指定
    polyobj.SetPolygon(0,c4d.CPolygon(0,1,2,3))
    
    
    return polyobj
    #空のポリゴンオブジェクトを作成
    polyobj = c4d.BaseObject(c4d.Opolygon)

今回もまず最初に、空のポリゴンオブジェクトを作成するために、polyobjという変数に入れました。これは、ポイントを作成するにしても、スプラインなのかポリゴンなのかを指定する必要があるためです。これまでもやったBaseObjectでポリゴンオブジェクトを作成しています。

    #ポリゴンオブジェクトにポイントとポリゴンの数を指定して作成
    polyobj.ResizeObject(4,1)

次に、空のポリゴンオブジェクトに、ポイントとポリゴンがそれぞれいくつかあるか指定します。ResizeObjectはポリゴン数やポイント数が変更になる場合にする関数です。また、人間が作業する場合先にポイントの座標をきめてからポイントを作成しますが、プログラムの場合はポイントの数を決めて後からその座標を指定するという順番になります。

    #ポイントの座標を指定
    polyobj.SetPoint(0,c4d.Vector(0,0,0))
    polyobj.SetPoint(1,c4d.Vector(0,100,0))
    polyobj.SetPoint(2,c4d.Vector(100,100,0))
    polyobj.SetPoint(3,c4d.Vector(100,0,0))

ここで各ポイントの座標を指定します。設定は「ポリゴンオブジェクトの変数.SetPoint(ポイント番号,c4dVector(x座標,y座標,z座標))」になります。

    #ポリゴンの作成するポイント順を指定
    polyobj.SetPolygon(0,c4d.CPolygon(0,1,2,3))

次がポリゴンの作成です。ポリゴンを作成するポイントの順番を指定していきます。手順としてはポリゴンの作成で、ポリゴンをクリックしていく順番と同じです。設定は「ポリゴンオブジェクトの変数.SetPolygon(1つ目のポイント番号,2つ目のポイント番号,3つ目のポイント番号,4つ目のポイント番号)」この順番でポリゴンの向きが変わるので注意が必要です。なお、ポイント番号が3つまでだと三角ポリゴンになります。なお、5つ以上ポイントを指定してもNgonは対応していないので、エラーになります。

最後に、returnでできたオブジェクトを返せば完成です。

ポリゴンの構造の調べ方

ポリゴンの作成方法が分かりましたが、複雑な形の時はどうしたらいいのでしょうか。ポリゴンオブジェクトについては構造マネージャでポイントとポリゴンを見ていただくと、ポイントとポリゴンの構造がよくわかります。複雑な形状を知りたいときはここで調べてもらうといいです。

ちなみに立方体だとこんな感じになっています。