SOFTIMAGEとMAYAで使用するPythonスクリプト超入門②~中編~※改訂版
次によく使うIF文の説明をしていきたいと思います。
そもそもIF分とは?WIKIさん↓
【
「もし~だったら」という条件を示す文。
条件に合致する場合に処理される真文、条件に合わない場合に処理される偽文で構成されている。
】
要は指定した事に対して、正解か外れかと判定する文です。
簡単な例でいうと、
今日の天気でいうと、大阪は雨だったので、
もし今日雨だったらTrue =本当って意味
違うならFalse =嘘って意味
というように真偽によって分岐させるわけです。
簡単にいうとですよ!!
これをスクリプトに置き換えると、
today = "ame" if today == "ame": Application.Logmessage(u"正解!") else: Application.Logmessage(u"残念!今日は雨でした")
みたいになりますね。
ちなみにより実践で書くと、
以前作成したオブジェクト「Cube_TEST」の名前が、
同じ「Cube_TEST」かどうかの条件文を書いてみます。
oSel = Application.Selection(0) Application.Logmessage(oSel) if oSel.name == "Cube_TEST": Application.Logmessage(u"正解") else: Application.Logmessage(u"残念")
※インデントに注意!
こんな感じです。
少しややこしくなりましたね。
これはIF文以外に
「選択している物」を取得した為です。
その辺り5分程度で見繕った画像用意したんで、こっちで説明してみます。
変な画ですが、そこはご愛嬌w
では細かく説明していきます。
一行目
oSel = Application.Selection(0)
ここでは変数という箱を用意し、選択物を変数(箱)に格納します。
Selection(0)で1番目に選択した物として格納。
二行目
Application.Logmessage(oSel)
おなじみログに選択した物(変数で格納した物)を文字で出力しています。
三行目
if oSel.name == "Cube_TEST":
でましたIF文!
ifと宣言し、その後に先程宣言した変数「oSel」の名前を「.name」で取得します
さらに条件分として、「==」を使い「変数の名前と一致したら」という条件をつけます。
その後判定になる材料「"Cube_TEST"」を記述します。
これで、「変数の名前が"Cube_TEST"と一致したら」という形になりました。
ちなみにこの「==」はほかにもいっぱいあります。
数学で学んだ、「<や>も」使用できます。
そして、最後に「:」で絞めて条件文の完成です。
その後条件にあった場合の、処理を記述していきます。
四行目と六行目
Application.Logmessage(u"正解") Application.Logmessage(u"残念")
ここで条件に一致処理を記述します。
内容は簡単なもので、IFが正しければ、ログに(正解)
間違いならば、ログに(残念)と記述します。
五行目
else:
elseとは「でなければ」や「そのほか」等の意味ですね。
これが無いと嘘の場合の処理が記述できません。
なので、ここではIFで弾かれた物=嘘の物を振り分けます。
以上こんな感じです
大丈夫ですかね?
あ、ちなみにjscriptでは、
var oSel = Selection(0); Logmessage(oSel); if (oSel.name == "Cube_TEST") { Logmessage("正解"); } else { Logmessage("残念"); }
まぁ毎度ですが、ほとんど変わりはありませんね。
jscriptはインデント式ではないので、その辺りは人によってはこっちの方がいいかも知れません。
あとifの条件式は()で囲まれ、
実行文は{}の括弧で中身を書きます。
各処理の後に「;」を打っています。
ちなみに分岐として、
「elif」もあります。
※「elseif」の略。
これはさらに条件分を追記できます。
簡単に説明すると、
ifだけだと、
もし正解(一致)だったらTrue =本当って意味
違うならFalse =嘘って意味
こんなイメージですよね。
elifとなると
こんな感じのイメージなります。
もし正解(一致)だったらtrue =本当って意味
もしくはこちらでも正解(一致)だったらtrue =本当って意味
違うならfalse =嘘って意味
みたいにさらに条件分を追加し、さらに篩いにかけれます。
要は深く条件事に処理できるようになるって事です。
さっきのコマンドから少し変えて記述してみると、
oSel = Application.Selection(0) Application.Logmessage(oSel) if oSel.name == "Cube_TEST": Application.Logmessage(u"正解") elif oSel.name == "Cube": Application.Logmessage(u"これでも正解") else: Application.Logmessage(u"残念")
みたいに、選んだモノに対しての条件を、記述する数だけ、篩い掛けれるようになりました。
※サンプルでは一回のelif
あ、jscriptでは↓
var oSel = Selection(0); Logmessage(oSel); if (oSel.name == "Cube_TEST") { Logmessage("正解"); } elseif (oSel.name == "Cube") { Logmessage("これでも正解"); } else { Logmessage("残念");
」
まぁ変わりといえば、「elif」が略さずに、「elseif」になったところでしょうか。
あとpythonと比べると、
少し長くなりましたね。
続いて、MAYA編
基本SIと変わりません。
なので、SI編と同じコードで
「オブジェクト「Cube_TEST」の名前が、
同じ「Cube_TEST」かどうかの条件文を…」
こちらをMAYAで書いてみます。
import maya.cmds as mc Sel = mc.ls( sl = True)[0] if Sel == "Cube_TEST": print (u"正解") else: print (u"不正解")
細かい説明はSi側と同じなので、省きます。
インデント「Tabキー」ですね。
これがないとエラーがでるので、注意が必要です。
あと、気になる点でいうと、
Sel = mc.ls( sl = True)[0] if Sel == "Cube_TEST":
ここでシェイプのタイプとか取れないのかな?
まぁ地道に調べていきます。
まぁこんな感じで書いていった条件文ですが、
ほかにも多種記述の仕方がありますが、Python対応が少ないので、割愛します。
※Swicth文なども未対応です。。。
と次にスクリプトで一番使ってるであろう、反復処理について記述します。
ですが、長くなったので、またまた一旦ここで切ります。
続く.....