文系デザイナーのためのmaya MEL/Python基礎の基礎⑫

では、前回の続きで「if」をMayaでやってみましょう。

前回のコメントアウトしたMaya命令をALT+4で元に戻して、最後のifの処理内に
「#m プレーンを表示する」というコメントを入れます。

MayaでPlaneプリミティブを出す命令をMELで探します。


例によってコンバータでPython化します。

pm.polyPlane(cuv=2, sy=10, sx=10, h=1, ch=1, w=1, ax=(0, 1, 0))
pm.cmds.scale(5, 1, 5, r=1)
pm.cmds.move(9, 0, 0, r=1, ls=1, wd=1)

これをPython IDLEへペーストします。move命令のYをtyに変更します。
では、それをMayaへコピペして実行してみましょう!

あれ?・・・・なんか大変なことになってます!でも各階のフロアはできてますね。
実はこれはダメなんです。ちょっとイジワルしました。ごめんなさい・・・
下の箇所を見てください。

「コピーする」という命令を書きましたね。この場合のコピー元は、上にあるCubeです。しかし、今回はその下のif命令でPlaneを作ってしまったので、コピーする対象が変わってしまった、なのでこういう結果が出るのです。
でも、ちゃんと螺旋状にPlaneが並ぶのも美しいじゃありませんか・・・

では。ちゃんと直しましょう。

どこが変わったかよく見てください。コピーをやめて毎回Cubeを作成しているように改造しました。
「#m コピーする」を削除し、上にあったCubeを作成して移動、グループ化に入れ替えただけです。

では実行してみましょう。

できました!

これで完成でもいいのですが、上にCubeが2個中途半端に作られています。
階段なのですから、段数をしていするより、階数の方が人間側としてはやりやすいですね。このように使いやすさも追求すべきです。

★階段は30度づつ回転している→360/30=12で12回の繰り返しで1階分

であれば、下のように書き換えます。

kaiとdanという変数を作り、kaiを12倍した値をdanに入れます。
1足しているのは0から始まるからです。復習ですが、プログラムでは数学でやったように、右の計算結果を左に入れる、という方式なので注意です。

では、実行すると・・・

いい感じですが、3階なのに4階めの床が出てしまっています。
またもバグ(エラー)・・・落ち着いて考えてみましょう。

プログラムは上から下に処理しますね?
その前までの処理は、
 1.ブロックを作って、Y移動、Y回転する
 2.tyを0.5倍する
 3.ryを30倍する
 4.もしryが360の倍数なら、床を作る
 5.繰り返す
どうですか?何かおかしいですよね?
ryを30倍してから、床を作る確認をしています。ということは、
30倍増えた値でifが判断するので間違った結果になるのは当然です!

 1.もしryが360の倍数なら、床を作る
 2.ブロックを作って、Y移動、Y回転する
 3.tyを0.5倍する
 4.ryを30倍する
 5.繰り返す

が正しいですね。では書き換えてみます。

実行すると・・・

今度は正しい結果になりました!おめでとうございます!

このようにプログラムはエラーとの戦いです。コンピュータに正しく指示しないと、思った通りに動いてくれないのです。
焦らず冷静に流れを読み返して修正していけば、必ずできるようになります。

では今日はここまでです。

 

コメントを残す