2012/03/26

python入門 とりあえずスフィアを作ってみる。

前回、「次回はオブジェクト指向について述べます」みたいなことを言ったのですが、説明ばかりではなんからしくないので(?)、まずは実際にやるっていうところを先に取り上げたいと思います。

まずはpythonを入力していくための準備ということで、スクリプトエディタにpython用のタブを用意します。スクリプトエディタの入力欄で右クリックするとマーキングメニューが現れますので、上にある「New Tab...」を選択。するとMELのタブを作るのかPythonのタブを作るのか聞いていますので、覚悟を決めてpythonを選択します。
(一行だけでしたら、メインウィンドウ下部のコマンドラインにある「MEL」というボタンをクリックして「Python」に切り替えてつかってもよいと思います。)

さて、Python用のタブができたら、
まずはmelの時同様スフィアを作ってみたいと思います。

前回のエントリーで、pythonの強い点としてライブラリを読みこめば機能を追加できると紹介しました。
まずは、pythonにmayaの能力を授けるべく、それ用のライブラリを読み込んでみましょう。大したことはないのですが、手軽すぎたmelと比べると最初はなにか手間が増えたような感じを受けますが、おいおい慣れてゆきたいところです。



呪文のように次の一行を唱えます↓

import maya.cmds

詳しくはあとで述べますが、これはPythonを使ってmayaを操作できるようする準備の行です。
(melでは行の終わりに「;(セミコロン)」が必要でしたが、pythonでは不要です。書いてもよいですし、書かなくてもよいです。)
続けて、スフィアを作るには以下のように記述します↓

maya.cmds.polySphere()


この二行を実行すると、球体が作成されると思います。




一行目について解説します。
import というのがライブラリを読み込むためのコマンドになります。
イメージとしては↓こうです

import ライブラリ名

ここでは「maya.cmds」というライブラリを読み込んでいます。

そして二行目、maya.cmds.polySphere() です。
よく見ていただくと↓この部分

maya.cmds.polySphere()

太字にしたpolySphereは、melでログを収集すれば お目にかかれるあのpolySphereと同様です。その前後に、maya.cmds. というのと、() がついています。
maya.cmds とは、ついさきほど、importの行で読み込んだライブラリです。
そして括弧は、関数を作るとき・実行する時に記述した、あの括弧です。
つまりpythonでは、読み込んだライブラリ名にmelコマンド(と同名の関数)を続けて書く、というスタイルで記述していきます。
ライブラリ名とコマンドを「.(ドット)」でつなぐ点に気をつけて下さい。
また、melでは関数名のあとの()は省略しても実効できましたが、pythonでは()を省略すると動いてくれません。このようなちょっとした作法の違いも覚えていく必要があります。

というわけで、↓このニ行でスフィアが作られます

import maya.cmds
maya.cmds.polySphere()


…それにしても、いちいちコマンドの前に maya.cmds. を書くのは、なんだか長ったらしくて面倒ですね。
実はこの部分、好きなように省略することができます。
import時に以下のように書いてみます。

import maya.cmds as cmds

こうすることで、このあとに続けて maya.cmds ライブラリ内のコマンドを使う場合は、cmds.~~でいけるようになります。
as ~~の部分は自由に指定できますので、例えば maya.cmds の略で as mc としてみるのもよいでしょう。
コマンドを使うときは、以下のようになります。

cmds.polySphere()
とか
mc. polySphere()
とか。

どちらも maya.cmds.polySphere() と全く同じ内容として扱われます。
これら以外にもimport周りではいろいろあるので、馴染んできたら調べてみるとよいと思います。

また、melコマンドではフラグで指定していたアトリビュートなどは、コマンドのあとの括弧の中に、「フラグ = 値」という形で記述していくことになります。
例えば↓このコマンドは

polySphere -r 1 -sx 20 -sy 20 -n "mySphere";

pythonでは↓このようになります

maya.cmds.polySphere(r=1,sx=20,sy=20,n='mySphere')



…というわけで、なにはともあれpythonでスフィアをつくるところから初めてみました。
しかしこれでは、いまいちpythonのよさを実感できません。インポートがある分melより手間なくらいです(笑
さらに、今回pythonの作法をざっとをなぞるということでmaya.cmdsライブラリをインポートしましたが、 ぶっちゃけ今後はこのライブラリは使わないで行きたいと思います(爆
よりpythonの特色を活かせる、こっちじゃない方を使います。

mayaにはmaya.cmdsの他にもpythonのためのライブラリ「PyMEL」が用意されており、こちらの方がより正しくオブジェクト指向に沿った仕組みになっています。PyMELが標準でインストールされるようになったのは最近(ver2011以降)のため、本格的な普及はこれからとも言われていますが、pythonの本領が発揮されるのは断然こちらです。

今後は、pymelを使ってmayaをごにょごにょして行きたいと思います。

0 件のコメント:

コメントを投稿