MEL関係
分けて欲しいスクリプトとか、
合ったらいいなってツールのアイディアとか、
まとめて欲しいMELのコマンドとか、
逆になんかあったらコメントでもいいから書いてって。
物凄く簡易な位置合わせツール。
MEL覚えたての頃に書いて、シェルフに放り込んだまま今でも結構使ってるスクリプト
合わせたい座標を持つオブジェクトを選択し、次にShift+選択で動かしたいオブジェクトを選択→実行でTransformの座標をコピーするだけ。
AttrがLockされてたりするとエラーが返ってしまうけど、ざっくりな用途には使えるかと。
string $copyTransObjects[] = `ls -sl`;
float $ctx = `getAttr ($copyTransObjects[0]+".translateX")`;
float $cty = `getAttr ($copyTransObjects[0]+".translateY")`;
float $ctz = `getAttr ($copyTransObjects[0]+".translateZ")`;
setAttr ($copyTransObjects[1]+".translateX") $ctx;
setAttr ($copyTransObjects[1]+".translateY") $cty;
setAttr ($copyTransObjects[1]+".translateZ") $ctz;
select $copyTransObjects[1];
AttrLockエラー回避とか、軸限定・反転なんかに対応したツール作ってたけどUIが未完のまま放置してあったのでこの際仕上げるわw
translateをrotateに書き換えるだけだが同じスクリプトのRotate用はこちら。
string $copyTransObjects[] = `ls -sl`;
float $crx = `getAttr ($copyTransObjects[0]+".rotateX")`;
float $cry = `getAttr ($copyTransObjects[0]+".rotateY")`;
float $crz = `getAttr ($copyTransObjects[0]+".rotateZ")`;
setAttr ($copyTransObjects[1]+".rotateX") $crx;
setAttr ($copyTransObjects[1]+".rotateY") $cry;
setAttr ($copyTransObjects[1]+".rotateZ") $crz;
select $copyTransObjects[1];
多分、xform辺りを使うともっとスマートな軸合わせコマンドが作れるんだろうけどxformまだ良く分かってない。
上のが1つ目に選択したもの→2つ目に選択したものへのコピーだったので、
1つ目→その後の全部にコピーされる版を書いた。
(未検証なので間違ってたらゴメンwこっちでも後で試すw)
string $copyTransObjects[] = `ls -sl`;
float $ctx = `getAttr ($copyTransObjects[0]+".translateX")`;
float $cty = `getAttr ($copyTransObjects[0]+".translateY")`;
float $ctz = `getAttr ($copyTransObjects[0]+".translateZ")`;
int $i;
for($i=1; $i < size($copyTransObjects); $i++){
setAttr ($copyTransObjects[$i]+".translateX") $ctx;
setAttr ($copyTransObjects[$i]+".translateY") $cty;
setAttr ($copyTransObjects[$i]+".translateZ") $ctz;
}
World座標に位置合わせするスクリプト例
更に修正。
World→Worldで移植するようにしたのでターゲットも親子付け構造の中にあっても同座標にAlignされます。
2行も短縮されてなんかそれっぽいw
string $selected[] = `ls -sl`;
float $WSpos[] = `xform -q -ws -t $selected[0]`;
int $i;
for($i=1; $i < size($selected); $i++){
eval("xform -ws -t "+$WSpos[0]+" "+$WSpos[1]+" "+$WSpos[2]+" "+$selected[$i]);
}
Rotateはこちら
string $selected[] = `ls -sl`;
float $WSrot[] = `xform -q -ws -ro $selected[0]`;
int $i;
for($i=1; $i < size($selected); $i++){
eval("xform -ws -ro "+$WSrot[0]+" "+$WSrot[1]+" "+$WSrot[2]+" "+$selected[$i]);
}
基本だけど…
よく使うマクロのテンプレ
選択したオブジェクトに対してコマンドを適応するときなど…
他にもやり方はいくらでもあるし応用例もいくらでも作れるので状況に応じて要改造。
string $selected[] = `ls -sl`;
string $object;
for($object in $selected){
//ココにコマンド
//ScriptEditorからコピペしてきてターゲット名を変えるなり弄れば良い。
//例)
setAttr -tx 5 $object;
}
例えば名前が共通してて数字がカウントアップしてってるだけの場合(<<pCube1,pCube2...pCube99>>みたいなヤツ)なんかだったら、
int $i;
for($i=1;$i<100;$i++){
//ココにコマンド
//例)
setAttr -tx 5 ("pCube"+$i);
}
なんて感じに。
当然だけどコマンドは何行でも良いんでプロセスが決まってるんならなるべく楽しちゃいましょう。
例えば上でやってることだけでリネームのマクロなんか書けちゃうのでサクッと例)
string $selected[] = `ls -sl`;
string $object;
int $i=0;
string $newName = "<ここに名前が入ります>";
for($object in $selected){
$i++;
rename $object ($newName+$i);
}
って感じ。
上のをプロシージャ化して$newNameに入る文字列を引数にしてやればリネームツールの完成。
(*またうろ覚え・未検証で書いてて後で確認するつもりなんで例ででっち上げたコマンドの書き方なんか間違えてるかもしれない…悪しからずw)
ちょっとした宿題。
レンダリングかけるときにRenderCamのimagePlaneのアルファが切れてなかったら切る
or
imagePlaneのアルファをオン・オフするスイッチ
どっちか用意する。
置き場所の変わったTextureFileへのリンクを一括で書き換えるコマンド。
副産物的に書いたので分ける。
下のスクリプトの指定されてる行にファイルパスを書き込んで変更したいFileノードを選択して実行。
{
string $newPath = "c:/newPath/";//ここに新しいパスを指定。
string $selected[] = `ls -sl`;
for($sel in $selected){
string $oldPath = eval("getAttr "+$sel+".fileTextureName");
string $parts[] = stringToStringArrary($oldPath, "/");
string $fileName = $parts[size($parts)-1];
setAttr -type "string" ($sel+".fileTextureName") ($newPath+$fileName);
}
};
import後のPrefixを取り除く
{
string $selected[] = `ls -sl`;
string $prefix = "<ここに取り除きたい行頭文字列>";
int $countPrefix = `size($prefix)`;
for($sel in $selected){
if( startsWith($sel, $prefix)){
int $countSuffix = `size($sel)` - $countPrefix;
string $newName = endString($sel, $countSuffix);
rename $sel $newName;
}
}
}
名前が被ってる場合なんかはこのままじゃ使えません。
- 位置あわせツールとかあるとすごくうれしい -- 9boz (2010-05-14 17:05:22)
- トンクス。でも↑こいつだと、フリーズかけられたオブジェクトには使えんね(・∀・)ヒヒヒ -- 9boz (2010-05-14 20:03:35)
- フリーズってロックとは違うの?確かコレだと読み取る側のAttrがロックされてるとエラー出るけど、出来るようにしてみてもいいからもちょっと具体的に書いといて。 -- kingeggman (2010-05-14 20:35:29)
- モデリング関係 -- 9boz (2010-05-14 21:08:15)
- そういえば関連する記事で昔こんなんがあったのを掘り出してきた http://mayastation.typepad.com/maya-station/2009/10/use-an-objects-world-space-position-for-set-driven-key.html -- kingeggman (2010-05-17 17:28:28)
- 少し調べてみたけど、やっぱりfreezeされたオブジェクトの場合はいわゆるcenter…ModifyでCenterPivotしたときのPivotの位置なら取れるのでソコ基準になりそうです。どの程度細かくAlignしたいのか知らないけど基本的にあんまし細かくなるとスクリプトの汎用性が損なわれるので作るより個別対応したほうが早くなるしめんどくさいw -- kingeggman (2010-05-17 18:06:49)
- 今度試してみます。 今はMAX案件なものでww -- 9boz (2010-05-17 23:54:19)
- リンクメモ。http://www11.ocn.ne.jp/~guiter/eng2jpn/01.html -- kingeggman (2010-05-20 12:35:15)
- リンクメモ.http://bazhutkin.com/ -- kingeggman (2010-05-23 02:24:56)
- 使ってみますた。便利ね。 X,Y,Zそれぞれのon/offができると・・・(´*=ω=) -- 9boz (2010-05-31 12:44:36)
- on/off実装したツールでけた。どうしよう? -- kingeggman (2010-07-09 15:11:16)
- おくればせながら、是非とも試したいでやんす -- 9boz (2010-10-22 22:53:49)
- 連番オブジェクトにコマンドかける奴、ネームスペース絡んでくると厄介かもめ -- 9boz (2010-12-14 15:43:59)
- えっと、トップに出てないノードの名前が被ってる場合とかってこと?確かにそういう時は一工夫必要。 -- kingeggman (2010-12-17 16:38:03)
- ちょっと変な書き方になる可能性があるけど、似た経験はあるので使いたい状況ハッキリさせてくれれば回避方法分かると思う。 -- kingeggman (2010-12-17 16:39:29)
- 名前には反映されないけど、オブジェクトをインポートした際にネームスペース(グループみたいなもの)に格納されて、ノードの頭に勝手にくっつくんだよね。 -- 9boz (2011-02-07 21:35:39)
- ネームスペースが有効になってると、ネームスペース+ノード名で引っ張らないと 取りこぼしが出ちゃうはず。 ネームスペースを消去すれば良い話なんだけど、アレの扱い方がイマイチよくわからない -- 9boz (2011-02-07 21:37:05)
- 使えるMELメモ: http://dorayuki.com/doramaya/ -- 9boz (2011-02-07 21:38:04)
- center pivot ってコマンドで表記するとどうなるの? よく使うからランチャーに登録したいのですがー -- 9boz (2011-07-05 17:31:12)
- xformから叩く方法もあると思うけど,CenterPivot; で通るよ。 -- 名無しさん (2011-07-05 21:53:16)
- ランチャーって、シェルフのこと? -- kingeggman (2011-07-05 21:55:00)
- Qt Creater を使うとUI作成が簡単らしい。 -- 9boz (2012-02-09 11:12:50)
- QTDesignerかな?使ってみたけどあれはあれでテンプレ作っとかないと結構めんどいかもwレイアウトとかは凄い楽だったけどね。 -- kingeggman (2012-03-08 16:10:39)
最終更新:2012年03月08日 16:10