2009年から仕事でMAYAを勉強。MAYAはデフォルトでは使い勝手が悪い。逆にスクリプトを覚えてカスタマイズするとかなり強力なツールになることがわかってきた。

物覚えが悪いので勉強したことはリマインダとしてココに書き留めるようにする。

2009年5月22日金曜日

【MEL】頂点ウェイトの値から端数を取る 3

昨日頂点単位で値を丸めるところはできたので、今日はそれを選択中オブジェクトの全頂点に適用する部分の追加をする。

昨日のうちにちょっとだけ調査は済んでいる。

//選択中オブジェクトの名前を取得。まあ基本中の基本
$Oname = `ls -sl`;

//選択中オブジェクトの頂点個数を調べて変数に(これでforループを回す)
//※頂点リストは必ず順番に数字が振られ、歯抜けになることはないらしい
//※$AmtObjVtxはfor文に使う
//※$val3はpCube1.vtx["*"]の*に代入して頂点を指定
{
string $AmtObjVtx[] = `ls -fl $Oname.vtx["*"]`;
int $val3 = `size $AmtObjVtx`;
}

ls -fl [オブジェクト名] で頂点の名前を取得できる。同時に個数をsizeで調べる。

--------------------------------------
昨日はここまで
--------------------------------------

が、昨日はオブジェクトをls -slで取得して、その変数を使って頂点数を調べようとしていたのがエラーが出て困っていた。要するに

string $AmtObjVtx[] = `ls -fl $Oname.vtx["*"]`;
// エラー: line 1: string[] 型のデータを string 型に変換できません。 //

となるのだ。これがやっと解決した。


なんのことはない、ls -slで取得される文字列は、オブジェクトが1個だったとしても配列データなのだ。
試しにwhatIsを使ってみると

whatIs "$Oname";
// 結果: string[] variable //

うん、配列です。ぐおー聞いてないよ~~~~


だから文字列にするには配列の任意の部分をとりだしてstring配列に入れなおさなければならない。

$Oname = `ls -sl`;
//ls -slで取得される文字は配列なので、その1個目を指定して文字列変数に入れなおす
string $Oname2 = $Oname[0];

これでとりあえずオブジェクトの名前を1個、文字列として取り出す部分は解決。これを使ってそのオブジェクトの頂点名の配列数でforを回す。以下のようになるはず

//★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
{
//選択中オブジェクトの名前を取得
$Oname = `ls -sl`;
//ls -slで取得される文字は配列なので、その1個目を指定して文字列変数に入れなおす
string $Oname2 = $Oname[0];

//オブジェクトの配列を取得
string $AmtObjVtx[] = `ls -fl pCube1.vtx["*"]`;
//これのpCube1を配列に置き換えればよい

//そのオブジェクトの頂点を1つずつ選択していくforループを作る

for ( $val in $AmtObjVtx )
{
select $val;
print ($val+ "\n") ;
}
}

★------------------ 完成 --------------------★

//start proc
{

//選択中オブジェクトの名前を取得
$Oname = `ls -sl`;
//ls -slで取得される文字は配列なので、その1個目を指定して文字列変数に入れなおす
string $Oname2 = $Oname[0];

//オブジェクトの頂点リストを取得
//オブジェクト頂点リストのpCube1.vtx["*"]を$Oname + ".vtx["*"]"とやろうとしても
//[*]が数値型のため上手くいかないので1文字ずつバラでくっつけて別の変数に格納する
$Vtxname = $Oname2 + ".vtx"+"["+ "*"+ "]";

//くっつけた文字列変数でオブジェクトの頂点名を配列に格納
string $AmtObjVtx[] = `ls -fl $Vtxname`;


//そのオブジェクトの頂点を1つずつ選択していくforループを作る

for ( $val in $AmtObjVtx )
{

//頂点選択する
select $val;

//★★★ここに昨日の丸め処理をつっこむ★★★

}





0 件のコメント: