逆引きOpenMaya辞典

OpenMaya(Python)絶賛勉強中

DAGPathを取得する

MSelectionList() は、選択しているノードの一覧を取得するコマンド。
add() で、引数のノードの名前をセット。

pymelやcmdsのように 変数 = 関数() で値を代入するのではなく、
予め代入用の変数を作成し、アクセス用の関数に代入する変数を与える のが、大きな違い。

Back To Top

コマンドプラグインを作成する

OpenMayaでコマンドプラグインを作成するサンプル。
お約束のHelloWorld。

基本は、omPx.MPxCommandを継承したクラスを作成して、 doIt() に、実行したいコマンド書く。
コマンドの引数は、doIt() の引数 args で引き取る。
argsはMArgList。

コマンドプラグインを作成するのに必要な基本的な形は以下のとおり。|
・コマンド名 MPxCommand 変数に指定
・MPxCommandを継承したクラス
・Mayaにコマンドを引き渡すためのコマンドクリエイタ関数(cmdCreator)
・初期化の initializePlugin() 関数
・解除時のuninitializePlugin() 関数

Back To Top

カスタムノードの作成

カスタムノードを作る時の基本型
計算のメイン処理は compute()内。
引数は、 plug(MPlug) と data(MDataBlock) で、ノードのinput から値を取得して、計算して、計算結果をoutputにセットする。
inputNodeかoutputNodeは、 dataHandleをoutputValue()にするかinputValue()にするかで決まる。

カスタムノードを作成する時は、
1 omPx.MPxNode を継承したクラスを作成
2 ノードクリエイタ関数 ノードイニシャライザ関数 initializePlugin() uninitializePlugin() を作成
3 compute()関数に、処理内容を作成

compute 関数内では、どの値が要求されているのかで計算方法を決める。
if plug == ADD_NUM.outputAttr:
この場合、 outputAttr 用の計算を行う。

 

とりあえず出来はしましたが、いまいちまだ応用が利きません(´・ω・`)
とりあえずノードはできたので、次はアトリビュート周りを色々テストしてみようかと思います。

Back To Top

選択しているノードを取得する

om.MSelectionList() は、選択しているノードの配列。
まず、空のSelectionListを作る。
MGlobal.getActiveSelectionList()で選択しているノードのリストを取得。

↑の例だと、選択しているCameraノードを取得して、Cameraのアクセス用
関数セットを作成。

Back To Top

CurrentFrameを変更する

MGlobalのviewFrame()で、現在フレームを取得。
引数は、MTimeオブジェクト。
値を取得したい場合は、 time.value() で取得

Back To Top

シーンを保存する・Exportする・開く

**MEMO**
maya.cmds で言うところの file コマンドにあたるものがまとめられているのがMFileIO。
コマンド名・引数ともにほぼほぼ同じ感覚で使用が可能(挙動も同じ?)
リファレンス周りのファイル操作も、同じくこのMFileIOを使用するようだ。

Back To Top

Meshノードを作成する

とりあえず板ポリを作成するノードを作成するプラグイン。
Meshは、

1 頂点座標の配列
2 Faceの構成情報(頂点IDとFaceID)
3 Faceの結線情報


で作成する。
Faceの結線は、 MIntArray で、頂点IDを指定。

Meshの生成は、 MFnMeshのcreateに、
頂点数,ポリゴン数,頂点座標の配列,ポリゴンカウントの配列,結線情報,出力用のMObject
を、引数に与える。

スクリプトだと1行で終わるMesh作成も、プラグインにするととてつもなくめんどくさいですね。
その代わり、思った通りのMeshを自由に生成できるので使いこなせれば色々と応用できそう?

Back To Top

Attribute値を取得する(まとめ)

アトリビュート値を取得する方法は2つ。
MDataBlockからとPlugから。

MPlugから取得する場合は、まず自分自身のノードnoMObjectを thisMObject() で取得し
MPlug(MObject,AttributeMObject) でAttributeのPlugを取得する
取得したPlugの asXXXX で、それぞれの型に応じて値を取得する。

MDataBlockから取得する場合は、まず MDataBlock.inputValue() で、指定のAttributeのHandleを取得する。
取得したHandleの asXXXX で、それぞれの型に応じて値を取得する。

配列の場合は、MDataBlock.inputArrayValue()で、配列のHandleを取得し、
配列の個数を取得した後、
jumpToElement()でシークしながら、ArrayHandleからHandleを取得する。
Handleからの値の取得方法は上と同じ。

Back To Top

CurrentFrameを取得する

MAnimControl() の currentTime は、現在フレームのMTime() を返す。
Mtimeの値を習得するには、 MTime.value()
まとめて一行で書くと↑のようになる。

Back To Top

コメントを残す

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


*