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

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

次はポイントの選択の操作をしてみよう。

適当にポリゴンオブジェクトを作成して、適当にポイントを数個選択。
Point_select_op_1 Point_select_op_2
ユーザスクリプトを次のように入力。

/*
ポイントの選択状況を反転
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++){
  if(pt_bs->IsSelected(i))//ポイントが選択されていれば
    pt_bs->Deselect(i);//選択解除
  else
    pt_bs->Select(i);//そうでなければ選択
}

op->SetPointSelection(pt_bs);//オブジェクトにポイントの選択状況を適用

これを実行すると選択範囲が反転します。
Point_select_op_3 Point_select_op_4
BaseSelectクラスのSelect(n)でポイントn番を選択状態に、Deselect(n)でポイントn番の選択解除を使ってます。正確にはSelect(n)、Deselect(n)でポイントの選択/非選択を操作しているわけではないんですね。リスト上で選択/非選択を操作。PointObjectクラスのSetPointSelection(bs)で選択リストを適用する。ですから適用するまで選択の状況は変化しません。
このスクリプトでは選択の反転をBaseSelectクラスのSelect(n)/Deselect(n)を使用しました。

for(i = 0 ; i < pc ; i++){
  if
(pt_bs->IsSelected(i))//ポイントが選択されていれば
    pt_bs->Deselect(i);//選択解除
  else
    pt_bs->Select(i);//そうでなければ選択
}

ですがBaseSelectクラスには選択状況を反転させるものがあります。
Toggle(n)です。n番の要素が選択であれば非選択に、非選択であれば選択に。
今回、if()を使って判別し選択したり解除したり4行になりましたが、

for(i = 0 ; i < pc ; i++){
  pt_bs->Toggle(i);//選択の反転
}

で1行で完了です。
但し、全てのポイントに対して選択状況を反転するのであれば、for()のループも省略して範囲指定ができるToggleAll(start_n , end_n)があります。

/*
ポイントの選択状況を反転 ToggleAll(s,e)
2008.12.23
*/


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

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

pt_bs->ToggleAll(0 , pc - 1);//選択状況の反転

op->SetPointSelection(pt_bs);//オブジェクトにポイントの選択状況を適用

ToggleAll(start_n , end_n)は範囲を指定して選択状況の反転をしますが、他に範囲指定できるものは、SelectAll(start_n , end_n)指定した範囲内を選択状況にします。
あとは範囲指定なしで全ての選択を解除するDeselectAll()があります。

C.O.F.F.E.E.でポイントの取得/適用、ポイント選択の取得/操作/適用が可能になったわけだ。次はポリゴンか?

C4D R11Demoは終了するときにスクリプトとプロジェクトの保存を聞いてくるなぁ。保存できないなら聞かないで欲しいなぁ。

|

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

コメント

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