« C.O.F.F.E.E.でUVWタグにアクセス-2スクリプト | トップページ | スプラインプリミティブの螺旋オブジェクト »

C.O.F.F.E.E.で選択されたuvポリゴンを縮小

前回のスクリプトにGetPolygonSelection()を使って選択されたuvポリゴンを0.5倍にしてみよう。ただし各ポリゴン毎に小さくなります。ですから隣接したポリゴンは離れてしまいます。ではスクリプトを…

/*
選択されたuvポリゴンを縮小
2008.12.25
*/


if(!op)return;//アクティブオブジェクトが無ければ終了

var at = GetActiveTag(op);//オブジェクトに取り付けられているタグのアクティブタグを取得
if(!instanceof(at , UVWTag))return;//アクティブタグがUVWタグでなければ終了

var pg_sl = op->GetPolygonSelection();//オブジェクトの選択状況の取得
var pg_c = op->GetPolygonCount();//オブジェクトのポリゴン数
var uv_pg = at->GetData();//UVポリゴンの配列の取得
var uv_data_c = at->GetDataCount();//UVWタグのインデックス数を取得
var mp;//UVWタグのインデックスからuvポリゴン配列のインデックスへのマッピング用
var i , j;//カウンター
var sc = 0.5;//スケール0.5
var ap;//ポリゴン4点の平均用

for(i = 0 ; i < pg_c ; i++){
  mp = i * 4;//マッピング

  if(pg_sl->IsSelected(i)){//選択されたポリゴンか
    ap = vector(0.0);//uvポリゴン4点の平均をリセット

    //uvポリゴン4点の平均
    for(j = 0 ; j < 4 ; j++)ap = ap + uv_pg[mp + j];
    ap = ap / 4.0;

    //4点の平均を中心に0.5倍にする
    for(j = 0 ; j < 4 ; j++)uv_pg[mp + j] = (uv_pg[mp + j] - ap) * sc + ap;
  }
}

at->SetData(uv_pg);//UVWタグにuvポリゴン配列適用

実行結果は明らかなのでコメントしません。

データ構造と処理の仕方を理解できれば、短いコードでも様々な事が可能になりますので、ぜひ皆さんも挑戦してみてください。
ポイント/ポリゴン/uvwと短時間で殴り書きのように打ち込んだので、あまり綺麗ではないのですが、特別に関数を作らなかったので、スクリプトの上から下までの流れを追っていただければ分かると思います。後はダイアログなり使って使い勝手のいいスクリプトを作ってみてください。

|

« C.O.F.F.E.E.でUVWタグにアクセス-2スクリプト | トップページ | スプラインプリミティブの螺旋オブジェクト »

コメント

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