スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
大好評の初心者用 Mel 講座。

今回はついに簡単なツールを作成してみましょう。

というわけで今回は
ChannelBox の『 Duplicate Values 』機能に似たものを
作ってみる事にします。

本来この機能は ChannelBox 中の選択されているアトリビュートに対して
値が複写されるわけですが、

今回は簡単なものという事で
アトリビュートの名前はソースコード中で指定する事にしましょう。

また、3つ以上のノードが選択されている場合の事は考えず、
2つのノード間だけで複写するようなツールにしましょう。


したがってこのツールのフローは以下の通りになります。

・選択されているノードの名前を取得
・片方のアトリビュートの値を取得
・もう一方のアトリビュートに値を設定

ヒントです。
ノード名の取得は ls コマンド
アトリビュートの値の取得は getAttr コマンド
アトリビュートの値の設定は setAttr コマンドを使います。

自信のある人は
下のソースコードを見る前に自分で考えてみましょう。

できましたか?

解答例はこちらです。

{
string $attr = "translateX";
string $selList[] = `ls -sl`;
float $val = `getAttr ($selList[0] + "." + $attr)`;
setAttr ($selList[1] + "." + $attr) $val;
}


おわかりいただけるでしょうか。
1行ずつ解説していきましょう。

string $attr = "translateX";

複写するアトリビュート名を string 型変数に格納しておきます。
この方が見やすく後で変更しやすいのでこうしましたが、
この通りにせず3行目にそのまま書き込んでももちろん問題ありません。


string $selList[] = `ls -sl`;

ls コマンドを使用して選択されているノード名を
string 型の配列変数に代入します。
最初に選択されたノードがインデックス0、
次に選択されたノードがインデックス1に格納されます。


float $val = `getAttr ($selList[0] + "." + $attr)`;

getAttr コマンドを使用してアトリビュートの値を変数に代入します。
少し複雑な文に見えるかも知れませんが、文字列の連結の回を思い出して冷静に見てみてください。
$sellist[0] の中身,『 . 』という文字,$attr の中身が連結されるので、
例えば $selList[0] に『pSphere1』という文字列が入っていれば
『pSphere1.translateX』という文字列が getAttr コマンド の引数になる事になります。


setAttr ($selList[1] + "." + $attr) $val;

setAttr コマンドを使用して先ほど格納しておいた値を
インデックス1のノードのアトリビュートにセットします。
つまり例えば $selList[1] に『pCube1』という文字列,
$val に 11.25 という値が入っていたとすると
setAttr コマンドの 第一引数に『pCube1.translateX』という文字列,
第二引数に『11.25』という値が入るという事になります。



今回は値を取り出して設定しなおすだけの簡単なものでしたが、
今後少しずつ複雑な Mel を作成していく事になっても
アトリビュートの値を取り出したり設定するような操作自体は
少なからずすることになると思うので。

是非きちんと理解しておいてください。



参考:
 Graberry Blog : コマンドについて
 Graberry Blog : 変数について
 Graberry Blog : 配列について
 Graberry Blog : 演算・連結について
 Graberry Blog : アサインについて
 Autodesk Maya オンラインヘルプ : lsコマンド
 Autodesk Maya オンラインヘルプ : getAttrコマンド
 Autodesk Maya オンラインヘルプ : setAttrコマンド


演習:
 上の解答例もしくは自分で書いたソースコードを、
 translateX だけではなく translateX,Y,Z 全ての値を複写するような
 プログラムに書き換えてください。

コメント
管理者のみ閲覧可能にする
Profile
HN らい

都内某社テクニカルディレクター
都内某専門学校講師
都内某企業講師
元中国某社S3Dスーパーバイザー
Contact
(ENGLISH OK. 可以用中文。)
Categories
Archives
RSS Link
QR Code