[mel] scriptEditorから覚えるmel講座 その5 繰り返し処理 そして本編へ。

余計なことばかり書いてないでさっさと終わらせろよシリーズになりつつある scriptEditorから覚えるmelの話。
前回で基本的なルールについて書いたので 今回でフロー制御まわりの説明をします。

基本的にプログラムとよばれるものは 条件分岐 と 繰り返し の2つでできてます。
条件分岐とは A = B の時は C の処理を 違えば Dの処理を のように 条件に対して 正しいか 間違っているか によって
処理を分けてあげる事。
繰り返しはその名の通り A を X回 繰り返す のように 何度も何度も同じ処理をすることです。

そこで、随分前に書いた日本語の文章を思い出してみます。

カーブを選択する
選択したカーブのCVの数分 下の処理を繰り返す
  CVにクラスターを作る
  ロケーターを作る
  ロケーターをCVの位置に合わせる
  クラスターをロケーターにポイントコンストレインする
作成したクラスターとロケーターをグループにまとめる

その3のときに、日本語の文章にしてみよう のコツとして
繰り返しをするところをまとめる と 処理を分ける必要があるなら書く というのは
このプログラムに書く時の最も基本となる フロー制御 を書きやすくするためのお約束だったわけです。
日本語の段階で このへんがきちんと抑えられてさえ言えば 「どうやって書くか」がわかるだけで
日本語 -> スクリプト言語への翻訳作業がとてーも楽になります。

繰り返し処理の書き方

for (変数 in 配列 ){

処理
}
カッコ内の処理を 配列の数分繰り返す

他にもいろいろありますが 一番使うのがこの for in 文です。

例)

複数のノードを選んだ状態で、↑のコマンドを実行すると
選択しているノード名がプリントされるかとおもいます。

この 繰り返し処理の書き方は、
配列 のなかから 1つ取り出して 変数にセット というのを変数の数分繰り返す
をしています。
取り出した値を入れる入れ物 は {} 内の for の繰り返し部分で使うことができます。
サンプルの $node というのは 配列から取り出された値なわけです。

細かく書くと、

pCube1 と pSphere1 と pCube2 を選択していた時
1行目 で、配列に値がセットされる
$select [pCube1] [pSphere1] [pCube2]
[0]                 [1]                [2]
for文
1週目
[0] の値が取り出される
$node には pCube1 が入っているので print文のところで pCube1 がプリントされる
2周め
[1] の値(次の値)が取り出される
$node には pSphere1 がセットされるので print文のところで pSphere1 がプリントされる
3週め
[2] の値(次の値)が取り出される
$node には pCube2 がセットされるので print文のところで pCube2 がプリントされる

3週目が終わった段階で 配列にセットされていた値がなくなってしまったので、ループは3週で終わり

という流れをたどります。
それを踏まえて 日本語文章の一部をコマンドで書いてみると

string $cvList[] = ??????;

for ($cv in $cvList){
$cv にクラスターを作る
ロケーターを作る
ロケーターを $cv の位置に合わせる
クラスターをロケータにポイントコンストレインする
}

こんな感じです。
{} の中に繰り返しやりたい処理をいれて ()に 変数 in 配列
$cv には、取り出されたCVの名前が入っている ので 日本語の文章でCV になってたところは
$cv に置き換えてみました。

変数の名前は自由につけてOKなのですが、私は 多少長い名前でも わかりやすい変数名をつける推奨
なので CVのリストは $cvList 取り出したCVの値を $cv としています。

だいぶコマンドっぽくなって来ましたね。
残りは 中の処理と CV を取ってくるところですが このうち 中の処理は 実は手で作ったスクリプトに答えがあるので
なんかかけそうな気がしてくるのではないでしょうか。

あとわからないのは CVをとってくる 部分。
こういうのは Google先生に素直に聞いてみると答えがわかりますが そのへんは次回詳しく解説します。
スクリプトを書く時の手順として 日本語に起こしてから、実際のmelに書き起こす作業をすると
わかるところからmelに置き換えていくようになるので、何がわからないかがはっきりします。
今回の例でいえば、手で作ったところは なんとかなりそう けど CVの情報を取ってくるやり方はよくわからないな のように。
そうなってくると もう問題解決まであとほんの少しです。

そんな感じで 次回 分からないものを調べて コマンドを埋めていこう
たぶんあと1~2回で終わるはず。

コメントを残す

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


*