Pythonの関数でMelプロシージャを生成する

Tips,Python,mel,Maya

pymelを見ていたら少し面白いものを見つけたので紹介
py2melProcというものです。
簡単に紹介するとPythonの関数をラップしてmelプロシージャを生成するというものだそうです。
ごちゃごちゃ言っても僕がわかりにくいので試してみます。
まず、生成したいプロシージャのもととなるPythonコードを用意します。

import maya.cmds as cmds
def ObjList():
    obj = cmds.ls(sl=True)
    for i in range(len(obj)):
        print obj[i]
ObjList()

上のコードを実行すると現在選択しているオブジェクトがリストされるというような単純なpythonです
よく使うコードです

次にpy2melProcの用意をします。先ほどのコードに付け加えていきます。

import maya.cmds as cmds
import pymel.tools.py2mel as py2mel

def ObjList():
    obj = cmds.ls(sl=True)
    for i in range(len(obj)):
        print obj[i]
py2mel.py2melProc(ObjList, procName='Py_ObjList', evaluateInputs=True)

Maya
Python
MEL
【Python】Pythonの関数でMelプロシージャを生成する【Mel】
October 20, 2017

PyMel見ていたら少し面白いものを見つけたので紹介

py2melProcというものです。
何かというとPythonの関数をラップしてmelプロシージャを生成するというものだそうです。

ごちゃごちゃ言ってもわかりにくいので試してみます。
まず、生成したいプロシージャのもととなるPythonコードを用意します。

上のコードを実行すると下の画像のように現在選択しているオブジェクトがリストされます

まあよく使うコードですね。
次にpy2melProcの用意をします。先ほどのコードに付け加えていきます。

py2melProcの簡単な説明は

MayaがPythonコールバックをサポートしていないとき
Pythonスクリプトを呼び出すのに便利なもの
Pythonのargsはデフォルトの値がなく、デフォルトでは文字列になります。

unction
呼び出し可能なPythonオブジェクト
Pythonオブジェクトを表す文字列が渡された場合は、
すべてのパッケージとサブモジュールを含める必要があります。

procName
作成するメルプロシージャの関数名
Noneの場合は関数の名前がそのまま使用されます。

evaluateInputs
Trueの時、複雑なPythonオブジェクトを引数として渡すことができます。
*args 実装はされていない
**kwargs 実装されていない可能性がある?

この状態で一度実行し、melのタブに移動します。
今回はPy_ObjListという名前でprocNameを設定したので


melタブにPy_ObjList;を打てばうまくいくはずです。
Mel使いにはちょっと便利な機能ではないでしょうか?