« C.O.F.F.E.E.での配列変数のテスト-2 | トップページ | C.O.F.F.E.E.でポリゴンオブジェクトのポイントを変更 »

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

ポリゴンオブジェクト(PointObjectクラス。スプラインオブジェクト等もPointObjectクラスです。)からPointデータ(ローカル座標)を取得するには、PointObjectクラスのGetPoint(n)かGetPoints()ですね。
GetPoint(n)はnにポイント番号を指定してポイントを取得するのですが、nの範囲は、0~(オブジェクトの総ポイント数 - 1)です。オブジェクト総ポイント数の取得は、同じくPointObjectクラスで、GetPointCount()を使います。それでは、コンソールにポイントデータを表示してみましょう。

/*
ポイントとポリゴンテスト
2008.12.23
*/


var pc = op->GetPointCount();//総ポイント数
var i;//カウント用

println(op->GetName() , "***総ポイント数 : " , pc);//オブジェクトの名前と総ポイント数の表示


for(i = 0 ; i < pc ; i++){
  println(i , " : " , op->GetPoint(i));//ポイント番号とポイントデータの表示
}

シンプルですね。
試しに、プリミティブの立方体オブジェクトを編集可能(ポリゴン変換)にして、スクリプトマネージャから実行してみます。その前に1個のみオブジェクトを選択してください。選択しなかったり、複数選択されているとエラーが出ます。

立方体***総ポイント数 : 8
0 : [-100.000000,-100.000000,-100.000000]
1 : [-100.000000,100.000000,-100.000000]
2 : [100.000000,-100.000000,-100.000000]
3 : [100.000000,100.000000,-100.000000]
4 : [100.000000,-100.000000,100.000000]
5 : [100.000000,100.000000,100.000000]
6 : [-100.000000,-100.000000,100.000000]
7 : [-100.000000,100.000000,100.000000]

このような結果が出ます。
これは構造タグに表示されるデータと同じです。
Point_data
今回はR11demo版を使用。demo版はプロジェクトの保存が不可なのですが、もしかしたらスクリプトは保存が可能ではないだろうかと、淡い期待をしていたのですが、スクリプトも保存が不可でした。残念です。全てを試したわけではないですが、多分全てのファイル保存機能が封じられているのでしょう…関係ないですがMaya体験版(Maya8.5PLE)はプロジェクトの保存が出来るんですよね。

先ほどのスクリプトはGetPoint()を使用しましたが、GetPoints()もあまり変わりはありません。全てのポイントデータを格納するための配列変数ptを宣言して、全てのポイントデータを取得。配列データの内容を表示。

/*
ポイントとポリゴンテスト
2008.12.23
*/


var pt = op->GetPoints();//ポイント全てを取得
var pc = op->GetPointCount();//総ポイント数
var i;//カウント用

println(op->GetName() , "***総ポイント数 : " , pc);//オブジェクトの名前と総ポイント数の表示


for(i = 0 ; i < pc ; i++){
  println(i , " : " , pt[i]);//ポイント番号とポイントデータの表示
}

実行すると先ほどと結果は同じです。
GetPoint(n)はオブジェクトから1個づつデータを取得するのですが、GetPoints()では、ポイントデータ全てをベクトル型の配列で取得できます。使い分けは、操作するポイントの数が少なかったり取得するだけだったらGetPoint(n)をfor()やwhile()で全体的に操作するならGetPoints()で配列を取得だろうか。大量のデータを扱う場合、1個づつ取り出すGetPoint(n)はGetPoints()より処理時間がかかってしまいます。

|

« C.O.F.F.E.E.での配列変数のテスト-2 | トップページ | C.O.F.F.E.E.でポリゴンオブジェクトのポイントを変更 »

コメント

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