サンプルコマンドすら読み解けなかった状態から、とりあえず簡単なノードを書くまでには成長した今日この頃。
いくつか分かった超基本な事メモ。
MObjectと関数セットについて
pymel コマンドになれていた当初は、何かの値をとってくる時などは
cam = pm.PyNode(“persp”)
# Result: nt.Transform(u’persp’) #
のように、 = で、必要なノードタイプのオブジェクトを受け取り、操作していたので
OpenMayaも同じオブジェクト指向だし、同じようなものかなー?とか思っていたのが
混乱の第一歩でした。
OpenMayaの場合は、まず アクセスしたいノードタイプ(Curve,Mesh,AnimCurve etc…)にアクセスするための 関数セット を作成し、対象となるノードのMObjectを引数で渡すことによって、操作したり情報を取得したりします。
MObjectは、いわゆる「ラベル」的な目印(ハンドルオブジェクト)で、Pyemlのような、直接ノードを操作するものではない ということですね(汗
各種クラスは、大きく4つに分かれていて
↑にあるように、オブジェクトにアクセスするための関数セット MFn
関数セットとほぼ同じような動きをするイテレータ MIt
クラスの継承元になる MPx
ラッパー(Int型やString型というような型と認識) M
それぞれ、クラス名の頭で役割が分かるようになっています。
MObjectと関数セットの意味を理解するまでがとても長かったですが、その辺理解したら
Helpの見方もだいぶ分かるようになりました。
ようやくスタートラインにたてた・・・とも言います(´Д)
MStringについて
もう1つHelpをみていて困ったのが HelpにかかれているMString。
当初は、MScriptUtilで小数点のポインタを取得するのと同様、PythonのOpenMayaでもMStringを使うのかとけっこう悩んだのですが、
Maya Python API からは、MString クラスと MStringArray クラスを削除しました。
Python にはすでに非常に堅牢な文字列の実装があるため、独自のものは必要ないからです。
なので、引数にMStringと書いてあるところは、
om.MGlobal.executeCommand(“polyCube”)
のように、string型を渡してしまえばOKということです。
なんというか、スタートラインにたつまでがとてもしんどいOpenMaya。
ですが、色々調べたりしていくと Mayaの内部的なことがより理解できたり
cmdsやPymelじゃ出来ないようなことが色々出来そうだってのが分かったりで楽しいです。
だいたいのHelpの読み方が分かってきたので
次は、Mesh生成やらについて色々調べてみようかなーと思います(`・ω・´)