« C.O.F.F.E.E.でポリゴンオブジェクトのポイントの選択操作 | トップページ | C.O.F.F.E.E.でポリゴンオブジェクトの選択されたポリゴンを変形 »

C.O.F.F.E.E.でポリゴンオブジェクトのポリゴン

ポリゴンの取得。

ポリゴンは4個のポイント番号で構成されていて、3D空間上で時計回りで指定されていればポリゴンの法線は手前に向く。

/*
ポリゴンの取得
2008.12.23
*/


if(!instanceof(op , PolygonObject))return;//選択されたオブジェクトがPolygonObjectクラス以外ならば処理を終了

var pg;//ポリゴン
var pc = op->GetPolygonCount();//オブジェクトのポリゴン数を取得
var i;//カウンター

println(op->GetName() , "***総ポリゴン数" , pc);//オブジェクトの名前とポリゴン数の表示
for(i = 0 ; i < pc ; i++){
  pg = op->GetPolygon(i);//ポリゴン番号iのポリゴンを取得
  println(i , " : " , pg->a ,//ポリゴン番号とポイント番号を表示
                " " , pg->b ,
                " " , pg->c ,
                " " , pg->d);
}

前回までのスクリプトはポイントオブジェクトに有効だったのでオブジェクトの選択の判別はポイントオブジェクトとそれ以外でした。今回はポリゴンにアクセスするのでポリゴンオブジェクトかそれ以外になります。ポリゴンオブジェクト以外ならスクリプトは何もせずに終了します。ポリゴン数を取得し、オブジェクト名とポリゴン数をコンソールに表示。ポリゴン数の数だけポリゴンを捜査しポリゴンを構成している4点(a,b,c,d)のポイント番号を表示します。

では、立方体プリミティブを追加して編集可能(ポリゴンオブジェクトに変換)にして実行すると…

立方体***総ポリゴン数6
0 : 0 1 3 2
1 : 2 3 5 4
2 : 4 5 7 6
3 : 6 7 1 0
4 : 1 7 5 3
5 : 6 0 2 4

では立方体の構造タグをポリゴンモードで見てみよう。
Polygons
コンソールと構造タグは一致してますね。

今のは、ポリゴンを一枚づつ取得し、ポリゴン->a…ポリゴン->dで4つのポイント番号を取得しました。では、ポイント取得の時と同じように配列で取得して見ましょう。

/*
ポリゴンの取得 配列
2008.12.23
*/


if(!instanceof(op , PolygonObject))return;//選択されたオブジェクトがPolygonObjectクラス以外ならば処理を終了

var pgs = op->GetPolygons();//ポリゴン配列
var pc = op->GetPolygonCount();//オブジェクトのポリゴン数を取得
var pg;//ポリゴン
var i;//カウンター

println(op->GetName() , "***総ポリゴン数" , pc);//オブジェクトの名前とポリゴン数の表示
for(i = 0 ; i < pc ; i++){
  pg = i * 4;//ポリゴン番号を配列のインデックスにマッピング
  println(i , " : " , pgs[pg] ,//ポリゴン番号とポイント番号を表示
                " " , pgs[pg + 1] ,
                " " , pgs[pg + 2] ,
                " " , pgs[pg + 3]);
}

結果は全く同じです。ポイントの場合、配列はポイント(ベクトル型)の配列でインデックスとポイント番号が一致していました。が、ポリゴンの場合はポイント番号の配列でポリゴンの配列ではありません。配列のインデックスはポリゴン0番のaが0、bが1、cが2、dが3。次のポリゴン1番のaが4、bが5、cが6、dが7、と続きます。ポリゴンの最初であるaのインデックスはポリゴン番号×4でbがaに対して+1、cが+2、dが+3ということです。
Polygondatas_2

|

« C.O.F.F.E.E.でポリゴンオブジェクトのポイントの選択操作 | トップページ | C.O.F.F.E.E.でポリゴンオブジェクトの選択されたポリゴンを変形 »

コメント

この記事へのコメントは終了しました。