【Maya/Python】OpenMaya PythonAPI2.0 逆引きメモ

これは Maya Advent Calendar 2019 の最終日25日目の記事です。

前日は cr_coyote さんの「ブレない伸びーるSplineIKリグを作ってみる」です。

 

 当初スクリプトからマテリアルまわりの取得&操作を書こうと思っていましたが、

2016年のMayaのAdventCalendarで mono-g  さんがすでに「Mayaのマテリアルのこねこね」を書かれていて、

自分の知ってる範囲内のマテリアルまわりの知識だとそんなに書くことなさそうだったので、

OpenMaya PythonAPI2.0 を使った基本的な処理の逆引きメモにしてみました。

 

OpenMaya自体の事は 一番下の参考サイトのところに書いている AREA JAPAN というサイト中で

Autodeskの築島さんが書かれた記事を読まれてるといいかもしれません。

 

20個くらい書きたいものがあったんですが、なかなか書く時間が取れなかったので

今回はとりあえずキリがいい10個書きました。 

 

※書けなかったネタは今後また少しずつ書いていく予定です。

  また急いで書いたので間違っている箇所があるかもしれません。

  もし間違いやもっと良い書き方がありましたら教えて頂けると助かります。

 

ちなみに検証はMaya2017を使っていますので、

もしかしたら2019や最近出た2020で変わっている部分があったりする可能性はあります。

 

目次です。


選択しているノードの一覧を取得する
Get the list of selected nodes

 

一番使うんじゃないかと思われる、いわゆる ls(sl=True) コマンドに相当するものですね。

 

OpenMaya.MGlobal.getActiveSelectionList()
https://help.autodesk.com/view/MAYAUL/2017/JPN/?guid=__py_ref_class_open_maya_1_1_m_global_html


選択しているノードから特定のノードの一覧を取得する

Filter specific types from selected nodes

 

 ls(sl=True, type=xxx) コマンドに相当するものですが、API2.0 では1行では書けません…w

 

OpenMaya.MItSelectionList()

https://help.autodesk.com/view/MAYAUL/2017/JPN/?guid=__py_ref_class_open_maya_1_1_m_it_selection_list_html


ノードタイプを調べる

Check node type

 

nodeType() コマンドに相当するものです。


トランスフォームとメッシュを取得する

Get transform and mesh

 

メッシュの方は listRelatives(transform, shape=True)  コマンドに相当するものですかね。

 

OpenMaya.MDagPath
https://help.autodesk.com/view/MAYAUL/2017/JPN/?guid=__py_ref_class_open_maya_1_1_m_dag_path_html


ノードをリネームする

Rename node

 

rename()  コマンドに相当するものです。

 

OpenMaya.MDGModifier()

https://help.autodesk.com/view/MAYAUL/2017/JPN/?guid=__py_ref_class_open_maya_1_1_m_d_g_modifier_html


TRSの値を取得、変更する

Rename node

 

xform()  コマンドに相当するものですかね。

 

OpenMaya.MFnTransform
https://help.autodesk.com/view/MAYAUL/2017/JPN/?guid=__py_ref_class_open_maya_1_1_m_fn_transform_html


キーフレームを取得、変更する

Get and set keyframes

 

keyframe()  コマンドに相当するものですかね。

 

OpenMayaAnim.MFnAnimCurve
https://help.autodesk.com/view/MAYAUL/2017/JPN/?guid=__py_ref_class_open_maya_anim_1_1_m_fn_anim_curve_html


エクスプレッションを設定する

Rename node

 

expression()  コマンドに相当するものです。

コード内のコメントにも書いていますがAPI2.0にはまだMFnExpressionが移植されていないので1.0の方を使うしかなさそうです。

 

MFnExpression
https://help.autodesk.com/view/MAYAUL/2017/JPN/?guid=__cpp_ref_class_m_fn_expression_html


mel コマンドを実行する

Execute mel command

 

mel.eval()  コマンドに相当するものです。

 

OpenMaya.MDGModifier
https://help.autodesk.com/view/MAYAUL/2017/JPN/?guid=__py_ref_class_open_maya_1_1_m_d_g_modifier_html


頂点カラーを取得、変更する

Get and set vertex colors

 

polyColorPerVertex() コマンドや polyColorSet() コマンドに相当するものです。

 

OpenMaya.MFnMesh
https://help.autodesk.com/view/MAYAUL/2017/JPN/?guid=__py_ref_class_open_maya_1_1_m_fn_mesh_html


 

はい、ひとまず今回は以上となります。

だいぶ 某H さん が勢力を拡大されていて、Mayaさん の立場が…いやなんでもないですw

 

色々困る点はありますが、3D全般でいうとまだまだ現場ではメインのツールだと思うので頑張って頂きたいですね。

 

では、少し早いですが、良いお年を!


参考サイト

 

第66回:MSelecctionListについて語る | 読んで触ってよくわかる!Mayaを使いこなす為のAtoZ | AREA JAPAN
第67回:Contextについて語る | 読んで触ってよくわかる!Mayaを使いこなす為のAtoZ | AREA JAPAN
第68回:AttributeとPlugについて語る | 読んで触ってよくわかる!Mayaを使いこなす為のAtoZ | AREA JAPAN
第78回:Mayaで複雑なツールを作る時のコツ ― 関数で使うデータの取り扱い | 読んで触ってよくわかる!Mayaを使いこなす為のAtoZ | AREA JAPAN

MAYA PYTHON API 2.0: IS IT READY YET?
https://matiascodesal.com/blog/maya-python-api-20-it-ready-yet/

How to find all upstream DG nodes with maya python api? - Stack Overflow
https://stackoverflow.com/questions/18738371/how-to-find-all-upstream-dg-nodes-with-maya-python-api