MEL合宿 -15日目-は、プログラミングの醍醐味!「制御構造」の「繰り返し処理」についてやっていきたいと思いまーっす!∠( ゚д゚)/
繰り返し処理って?
MELでツールを作っていると、複数のノードに同じ処理を適用したい場合がたっくさんあります!同じコマンド・似たような処理を、何度も繰り返し実行するのが「繰り返し処理(ループ)」です!
MELでの繰り返し処理は、「for文」「while文」の2種類があります!まずは、for文からやってみたいと思いまーす(*´ω`*)b
for文
MELでのfor文は、以下のように記述します。
for(変数 in 配列の変数){ 繰り返し行いたい処理 }
このfor文は、以下のように処理されていきます。
- 「配列の変数」から、1つデータを取り出します。
- 取り出したデータを「変数」に代入します。
- for文のブロック内に書かれた「繰り返し行いたい処理」を行います。
- 「配列の変数」から取り出すデータがなくなるまで、1~3を繰り返します。
for文を実際に試して見るために、新しいコマンドをいくつか使ってみましょう!
for文を使ってみる!
for文を使ってみるサンプルとして、選択されたノードを取得してScript Editorにノード名を表示してみたいと思います!
まずは、選択されたノードを取得取得します!これは、「MEL合宿 -10日目-」でやりましたね!覚えていますか?(゚∀゚)
{ string $selection[] = `ls -sl`; }
次に、for文の書き方を元に、for文を用意します!(`・ω・´)ゞ
{ string $selection[] = `ls -sl`; for($node in $selection){ } }
配列の変数「$selection」の全てのデータを取り出すと「for文」が終了します。
次に、ノード名をScript Editorに表示するために、変数「$node」と「print文」を使って見ましょう!!1つ1つ改行されるように「\n」も使っちゃいましょう(*´ω`*)b
{ string $selection[] = `ls -sl`; for($node in $selection){ print ($node+"\n"); } }
ノードを選択した状態でコードを実行してみると、選択されたノード名がキッチリScript Editorに表示されると思います!
もう少し具体的な例
もう少し具体的な例を試してみましょう!選択されたノードに、シェイプがあるモノだけをScript Editorに表示したいと思います。
listRelatives
「listRelatives」は、指定されたノードの「親ノード」「子ノード」「シェイプノード」を取得することができます。
やってみよう!
先程のコードをベースにやっていきたいと思います!まずは、「for文」のブロックの中に、以下のコードを追加して、ノードにシェイプがあるか調べます!
戻り値は「string []」なので、配列の変数で受け取れるようにします!
{ string $selection[] = `ls -sl`; for($node in $selection){ string $shapes[] = `listRelatives -s $node`; } }
次は、「シェイプがあるモノだけをScript Editorに表示」するようにします!
以前やったif文とコラボして、配列の変数「$shapes」の要素の数が1個以上の場合だけprintするようにすればOKですね!(`・ω・´)ゞ
{ string $selection[] = `ls -sl`; for($node in $selection){ string $shapes[] = `listRelatives -s $node`; if(`size $shapes` >= 1){ print ($node+"\n"); } } }
シェイプのあるノード、ないノードを選択して実行すると、以下のようになります(*´ω`*)b
if文とコラボすることで、さらにいろいろな事ができそうですね!今回はシェイプの有無でしたが、シェイプの種類が「mesh」なら処理するなどとする、ポリゴンにだけ処理ができたりします!ぜひぜひチャレンジしてみてください!v(*´ω`*)v
まとめ!
- 同じような処理を何度もやりたい場合は、「繰り返し処理(ループ)」を使う!
- for文は「for(変数 in 配列 ){}」と書くことで、配列のデータを1つづつ処理できる!
- for文の中に、if文を使ったりすると色々なことができる!
それでは、次回もお楽しみに!(`・ω・´)ゞ