[mel] scriptEditorから覚えるmel講座 その2 melを読んでみよう

前回に引き続き、ScriptEditorにでてきたログからMelを覚えてみよう企画その2.
今回は、前回作ったMelログを読んでみます。
まず、Melを読む上で 暗記したほうが良いことと 暗記する必要がないこと と2種類あります。

まず覚える必要がないことは、Mayaで使えるコマンド一覧とオプションの類。
あの量を覚えるとか無理ですし、ましてやオプションはバージョンによってけっこう変わります。

覚える必要があるのが、
・コマンドの読み方
・For If のような繰り返し・分岐処理の書き方
・変数について
ぐらいで、非常に少ないです。
コレばかりはさすがに覚る必要がありますが、分厚いプログラムの1ページ目から読み始めた時の絶望感ほどはない…んじゃないでしょうか。

そんな感じで、前回のコマンドを見つつ コマンドの読み方を解説します。

[cpp]
select -r curve1.cv[0] ;
newCluster " -envelope 1";
spaceLocator -p 0 0 0;
select -r cluster1Handle ;
select -add locator1 ;
pointConstraint -offset 0 0 0 -weight 1;
select -r locator1_pointConstraint1 ;
delete;
select -r locator1 ;
select -add cluster1Handle ;
pointConstraint -offset 0 0 0 -weight 1;
[/cpp]

mel コマンドは基本的に

コマンド名 オプション 対象;

という順序で記述されています。
たとえば1行目の select -r curve1.cv[0] ; は、 select 部分がコマンド名 -r がオプション curve1.cv[0] が対象になります。
コマンドを読むときは、まずMayaHelpのテクニカルドキュメントを開いておき 分からないコマンドがあれば ここでコマンド名を調べます。
select を調べてみると

このコマンドを使用して、オブジェクトをアクティブ リストに追加、またはリストからオブジェクトを削除します… 

コマンド名から分かる通り、Selectは 対象を選択するコマンドです。
対象をSetsにするとSetsに含まれるオブジェクトが選択されるよーとか、ネームスペースがついてたらネームスペースも入れてねー 等、
そのコマンドの使い方が、概要部分にかいてあります。

続いて -r はオプション。
オプションには -r のように -英数字 引数 のように記述します。
引数とは、オプションやコマンドになにかしら文字を指定したい時などに指定します。
例えば ls -type “mesh” (lsは、指定のものをリストするコマンド -type は、指定のノードをリストする)など。
どんなときにどんな引数を使うかは Helpのフラグリストの 引数型 というところをみますが、今のところは使わないので割愛します。
関数をつくる あたりで引数については補足します。

今回のselectの-r は アクティブ リストの既存の項目を指定した項目で置き換えることを示します。
ちょっとわかりにくいですが、すでに選択されているものがあった場合はそれは一度選択解除して
その後 対象 に指定したものを選択する フラグです。

最後の対象は、その名の通り、コマンドの対象を指定します。
今回の場合、  curve1.cv[0]  と書かれているので curve1のcv[0]を という意味になります。
今回の例では1つですが
select -r curve1 locator1 ;
のように、複数対象を書くこともできます。
対象の数は、コマンドによって違うので Helpをみて 複数なのか1つだけなのか確認しましょう。
また、この対象指定は必須ではありません。
対象が書かれていない場合は 選択されているもの に対してコマンドが実行されます。

基本 こんなかんじで、 コマンド名をみて Helpを見る → オプションを確認 してログに書かれている内容を読みながら1行づつ実行してみます。
しかし、中にはHelpにはのっていないコマンドも存在します。
この手の物は、Maya本体のコマンドではなく Melで書かれたコマンドで Helpにはのっていません。
どうしても意味が知りたい場合は、Mayaのインストールフォルダ下のscriptsフォルダ下の何処かにあるので中身を読んで解読します。探し方は過去記事にて。
今回は newCluster と doCreatePointConstraintArgList の2つが該当します。
newCluster は、その名の通り 選択しているものにClusterを作成します。
2つめは、ポイントコンストレインのオプションを指定するためのリストを作成(?)多分。実はなくても大丈夫です。

以上を踏まえて、あらためて↑のコマンドを読んでみます。
curve1.cv[0] を選択する
クラスターを作る
ロケーターを作成する
ロケーターを選択する
クラスターを選択する
ポイントコンストレインをする
ポイントコンストレインノードを選択する
コンストレインノードを削除
ロケーターを選択する
クラスターを選択する
ポイントコンストレインする

というのが↑のコマンドで実行している内容になります。
つまり、1つ分のコントローラーを作る 内容が ↑ということですね。
さらに、createCluster_sample1.mel の↑のコマンド以降をみると、
途中まで、ほとんどおなじ順序で同じコマンドがならんでいるのがわかるかと思います。
コマンドも、コマンド名でだいたいなにやっているか がわかりますし、Helpを見ながらやれば
オプション内容でなにをしているのか も、読むことができます。
コマンド分からない!覚えられない! と、スクリプトエディタを読むのは難しい と
思う人もいるかも知れませんが、1行づつ 落ち着いて読めばそんなに難しくはありません。
よくわからない場合は、わからないコマンドを実行して確認してみる 等すれば
より理解がしやすいのではないでしょうか。

そんなこんなで なんとなーくでもコマンドが読めたら、実際に加工していきます。
読んでいると 途中 何度も同じふうなコマンドの並びが 何回か続いているのがわかるのではないでしょうか。
今回の場合、 【コントローラー1つを作る】 動作を何回か繰り返していますね。

前回作ったコマンドだと、決められたカーブに決められたCVの数のものでないと使えないので とても不便!
というのが問題だったので、次ではまず コントローラー1つを作る コマンドを加工して
CVの数分 コントローラーを作る というコマンドにしてみます。

そのためには、またいくつか覚える必要があることがあるのですが それはまた次回。

コメントを残す

メールアドレスが公開されることはありません。


*