« C4D Python R12 テスト:標準マテリアルを少々やってみた。 | トップページ | C4D Python R12 テスト:ポリゴンオブジェクトのエッジ試してみる。 »

C4D Python R12 テスト:ポリゴンオブジェクトのN-gonsってどうなってるの?

たしか…COFFEEは、N-gonsには何ひとつ対応していないんだったよね…
C4D Pythonでは、どうなんだろうね…

適当にN-gonsを含むポリゴンオブジェクトを用意してみた。
上下の面がN-gonsで、側面が四角ポリゴン。

Ngons_01

Ngons_11

上面のN-gonsを選択して構造マネージャを見てみたら下のようになっていた。

Ngons_02

N-gonsは、複数のポリゴンで構成されているのですが、ポリゴン番号は必ずしも隣り合っているわけではないようですね。

ちなみに、N-gonsを構成するポリゴンの1つを構造マネージャで選択すると、N-gons全体が選択されるんですね。

Ngons_03

構造マネージャには、ポイント/ポリゴン/UVW座標/頂点ウェイト…更にN-gonsのモードがあるんですね。

Ngons_04

下がN-gonモードの表示
N-Gonsの構成はポリゴン番号ではなくポイント番号なのですね…

Ngons_05

この辺りの動作は、C4Dの仕様の部分ですか…

C4D Pythonでは、どうなんだろう…
C4D Python SDK Documentには、C4D PythonとN-gonsとの絡みは具体的な事は記載されていないなぁ。

c4d.PolygonObjectクラスのメソッドを眺めていると…

PolygonObject.GetNgonCount()

ぱっと見これだけ…
N-gonsをカウントして…それでどうするんだろう。

Python
import c4d

def main():
    print op.GetNgonCount()

if __name__=='__main__':
    main()
2

このポリゴンオブジェクトには、N-gonsが2個あるんだね…で、それからどうするの…?

てっきりGetNgons()とかがあって、N-gonsのリスト等を取得するようなメソッドがあるのかなぁ…なんて期待したんだけど。無いようだ…

あぁ、よく読むと…

PolygonObject.GetPolygonTranslationMap()

ポリゴンインデックスからN-gonインデックスに変換するマップを取得するメソッドもあるのか…

Python
import c4d

def main():
    print op.GetPolygonTranslationMap()

if __name__=='__main__':
    main()
[2, 3, 4, 5, 0, 1, 1, 6]

ポリゴンからN-Gonsへ変換するマップと記載されているにもかかわらず…
ポリゴン数とリストのインデックス数は同じでなければならないはずなのに足りない…残りの4個はどこへ?
どうやらバグのようだ…

ポリゴンデータ ポリゴンのN-Gons対応表 N-gonsデータ

Ngons_06

Ngons_13

Ngons_08

C4D Pythonから取得されるべきマップリストは、下記のようになるはず…
試しているのはDemo版だからだろうか?

[2, 3, 4, 5, 0, 1, 1, 6, 0, 0, 1, 7]

仮に変換マップが取得できてもね…
C4D Pythonでは、N-Gonsデータが取得できないのだから、変換マップの取得は意味が無いような…

現状N-gonsをカウントするGetNgonCount()のみが使えるだけと言う事だろうか…

さて、C4D PyhonからN-gonsを構成している複数のポリゴンの一つを選択すると、GUIから選択して時と同じように、N-gons全体が選択されるのか試してみよう。

試しにポリゴン4番をC4D Pyhonで選択してみる。

Python
import c4d

def main():
    sel = op.GetPolygonS()
    sel.DeselectAll()
    sel.Select(4)

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

Ngons_12

C4D PythonからのN-gonsを構成するポリゴンの一つを選択しても、N-gons全体の自動選択はされないようだ。

|

« C4D Python R12 テスト:標準マテリアルを少々やってみた。 | トップページ | C4D Python R12 テスト:ポリゴンオブジェクトのエッジ試してみる。 »