Python, PyMELはとても便利ですが、どうしてもMELコマンドが必要になる場合があります。
特に多いのが、標準仕様として実装されたコマンドではなく、後から.melとして実装された追加コマンドが必要になるパターンです。
また、過去に自分で作ったプロシージャをPythonから呼び出す事もあるかと思います。
そういった時、通常であれば以下のようなコードを書くことになります。
MELコマンドを文字列として作成し、evalメソッドで実行します。既に汚いです。
この例では引数の数が少ないのでまだマシですが、コマンドが長くなると更に鬱陶しくなります。
こういう場合、もっと綺麗に書く方法があります。
pm.melクラスにコマンドをメソッドとして渡します。
非常にスッキリしました。
pm.melクラスは、コマンドを動的に生成しているのでこのような使い方ができます。
ちなみに、pm.Melクラスでは動作しません。(何故?)
この方法では、globalとして定義された全てのMELプロシージャを呼び出す事が出来るので、maya.cmdsやPyMELに定義されていないコマンドを呼び出すのに非常に便利です。
ついでにMELプロシージャを定義する機能を探したのですが、私の方では見つかりませんでした。
PyMELを作る上で実装しているような気がするのですが・・・。
もし知っている方がいれば教えて頂けると幸いですm(_ _)m
自分で作りました。 >> PythonからMELプロシージャを定義する
特に多いのが、標準仕様として実装されたコマンドではなく、後から.melとして実装された追加コマンドが必要になるパターンです。
また、過去に自分で作ったプロシージャをPythonから呼び出す事もあるかと思います。
そういった時、通常であれば以下のようなコードを書くことになります。
import pymel.core as pm # myProcはグローバルプロシージャ cmd = "myProc -n \"test\" -a 24 -b 0.15 \"arg string\""; pm.mel.eval(cmd)
MELコマンドを文字列として作成し、evalメソッドで実行します。既に汚いです。
この例では引数の数が少ないのでまだマシですが、コマンドが長くなると更に鬱陶しくなります。
こういう場合、もっと綺麗に書く方法があります。
pm.melクラスにコマンドをメソッドとして渡します。
import pymel.core as pm pm.mel.myProc("arg string", n="test", a=24, b=0.15)
非常にスッキリしました。
pm.melクラスは、コマンドを動的に生成しているのでこのような使い方ができます。
ちなみに、pm.Melクラスでは動作しません。(何故?)
この方法では、globalとして定義された全てのMELプロシージャを呼び出す事が出来るので、maya.cmdsやPyMELに定義されていないコマンドを呼び出すのに非常に便利です。
PyMELを作る上で実装しているような気がするのですが・・・。
もし知っている方がいれば教えて頂けると幸いですm(_ _)m
自分で作りました。 >> PythonからMELプロシージャを定義する
コメント