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

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

ポリゴンオブジェクトの選択されたポイントの取得はどうするんでしたっけ?

まずは、ポイントの選択状況を操作するBaseSelectクラスを得るには、PointObjectクラスのGetPointSelection()を使うんだよね。それで取得したBaseSelectクラスのIsSelected(n)を使ってポイントの選択状況を取得します。nはポイント番号です。

/*
ポイントの選択状況を取得
2008.12.23
*/


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

var pt_bs = op->GetPointSelection();//ポイントの選択状況を操作するクラスオブジェクトを得る
var pc = op->GetPointCount();//オブジェクトのポイント数を取得
var i;//カウンター

for(i = 0 ; i < pc ; i++){
  println(i , " : " , pt_bs->IsSelected(i));//ポイントの選択状況

}

まず適当に少なめのポイントのポリゴンオブジェクトを用意して、ポイントを適当に数個選択します。

Point_select_1 Point_select_2

こんな感じです。構造タグで見てみると2番、3番が選択されています。
さて、このスクリプトを実行してみます。

0 : 0
1 : 0
2 : 1
3 : 1
4 : 0
5 : 0
6 : 0
7 : 0

コンソールには、この様に表示されました。先頭がポイント番号で、次が選択状況です。
0(FALSE)非選択、1(TRUE)選択です。2番、3番が1で構造タグの選択状況と同じになっています。後は、このポイント番号のポイントの数値を変更してオブジェクトに適用すれば完了です。

/*
選択ポイントを0.5に縮小
2008.12.23
*/


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

var pt = op->GetPoints();//全ポイントを取得
var pt_bs = op->GetPointSelection();//ポイントの選択状況を操作するクラスオブジェクトを得る
var pc = op->GetPointCount();//オブジェクトのポイント数を取得
var i;//カウンター

for(i = 0 ; i < pc ; i++){
  if(pt_bs->IsSelected(i))pt[i] = pt[i] * 0.5;//選択されたポイントの値に0.5を掛けて縮小

}

op->SetPoints(pt);//オブジェクトにポイントを適用
op->Message(MSG_UPDATE);//オブジェクトの更新

選択されているポイントが数個とは限らないので全ポイントデータを配列で取得。GetPointSelection()でポイントに対してのBaseSelectを取得。BaseSelectクラスのIsSelected()でポイントの選択状況を取得。IsSelected(n)で帰ってくる値は0(FALSE)/1(TRUE)なので、そのままif()の条件式に使い選択されたポイントに0.5を掛けて値を小さくしました。後は先ほどと同じくポイント配列をオブジェクトに適用して更新します。実行すると同じように軸に対して選択されたポイントが小さくなります。

|

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

コメント

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