pymelで遊ぼう

この間のCGカンファレンスでいろいろ活力を得て
ここらでいっちょ新しいことでも覚えるか!!
と、C++のプラグインに手を出すかPymelさんに手を出すか考えたのですが
(業務的な意味で)近々がっつりPythonことになりそうなので Pymelを覚えてみることにしました。
決してC++から逃げたわけじゃないんだからねっ!!


Pymelさんは、簡単に言えば
オブジェクト指向なPythonでMayaをコントロールできるよ!!という代物。
今までのmaya.cmdsは、帰ってくる値はstring やら int やら float といったものだったわけですが、
pymelさんの場合は『オブジェクト』が帰ってきます。
pythonさんの int や string の変数でいろんなメソッドが使えるように
pymelさんのコマンド結果で帰ってくるオブジェクトのメソッドでいろいろ便利なことができます。

例)pythonのstring型 splitメソッドを使った例

[python]
test = "a.i.u.e.o"
test.split(".")
# Result: [‘a’, ‘i’, ‘u’, ‘e’, ‘o’] #
[/python]

例)pymelで帰ってきたオブジェクトで、メソッドを使ってみたりconnectAttrしてみた例

[python]
#polyCubeコマンドの結果、TransformとpolyCubeのオブジェクトが帰ってくる
cubeTransfromObj = pm.polyCube(n="testCube")[0]
# オブジェクトのメソッドを使用してShapeノードを取得
cubeShapeObj           = cubeTransformObj.getShape()
#ロケーター作成
locatorObj = pm.spaceLocator()
#connectAttr は >> Disconnectは //でできる
locatorObj.t >> cubeTransformObj.t
[/python]

こんな感じで、帰ってきたオブジェクトを使用してShapeノードを取得したり、ConnectAttrしたりとか簡単に書けます。
Sugeeeee

ConnectAttrとかmaya.cmdsのわかりにくさに比べたら100倍ぐらい簡単です。スヴァラシィです。

ヘルプの読み方

正直、当初これが全然わかりませんでした(‘A`)
おおざっぱに Help左側の『Core』になってるところが、帰ってくる値がオブジェクトになったmaya.cmdsコマンドのようなものです。
だいたいコマンド名はmaya.cmdsと同じような名前+ある程度分類分けされているので探すには困らなそうです。
そこのFunction それれぞれのコマンド部分をクリックしてでてくるのが、引数一覧。
引数もほぼほぼmaya.cmdsと同じ感じですね。

帰ってくるオブジェクトの一覧は、 Core Modulesの nodetypes
# Result: [nt.Transform(u’testCube’), nt.PolyCube(u’polyCube1′)] #

コマンドを実行したときの結果の
nt.Transform とか nt.PolyCube というのが、オブジェクトのタイプなので、該当のnodetypeを一覧から調べれば
どんな機能を持っているか調べることができます。

ノード名からオブジェクトを取得する場合は、

node = pm.PyNode(“testCube”)
node.getShape()
# Result: nt.Mesh(u’testCubeShape’) #

PyNodeコマンドでオブジェクトを取得できます。

こんな感じで とりあえず、Helpの読み方とかがわかったので後は実戦あるのみ☆ミ です。
私はスクリプト書くときは 文法ざっと見る→Helpの見方を覚える→実戦GO!
なので、次の仕事で書くコマンドはpymelでTryしてみようかなと思います。業務に支障がでない程度で(汁

感想

人から話は聞いていたものの、ここまで便利 かつ わかってしまえば恐れることはないもんだと思いませんでした。
セットアップスクリプト書くときなんかはもう涙がでるぐらい恩恵受けそうでBlog書きながらテンションUpしてきました。
やっぱりあたまっから 英語 無理 とか思わずに、チャレンジしてみるもんですね└(┐Lε:)┘

コメントを残す

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


*