The current MTOR in RenderMan Studio 2 still doesn't provide python binding and there must be some reason but I didn't check it with their technical guys. I guess it is not in priority list. But there is prman (the renderer) for python started from prman 14.0 and we have experienced on it by developed a re-lighting tool based on prman's new re-lighting framework. Python binding works well except some re- lighting bug.
- Drake On Sep 18, 12:07 am, Paul Molodowitch <[email protected]> wrote: > Well, glad you got that sorted out. =) > > Still, I'm a little surprised that the PRMan plugin didn't also supply > a python version of mtor - generally speaking, as long as the plugin > is implemented "properly" - ie, uses MSyntax for it's command arg > processing - it should make both a python and mel command. > > - Paul > > On Thu, Sep 17, 2009 at 3:41 AM, Drake <[email protected]> wrote: > > > Hey Paul, > > > Thx a lot for the detailed explanation. During the tracing of pymel's > > Mel class, I did notice the different handling of mel commands and mel > > functions and I didn't realize that I have found the solution yet. > > PRMan's mtor is command-styled and I would use pymel.mel.mtor > > ('control', 'getvalue', '-sync') for them. > > > Sometimes, it is too convenient to use pymel such that we made some > > very fundamental mistakes~ > > > -- Drake > > > On Sep 17, 12:04 am, Paul Molodowitch <[email protected]> wrote: > >> Hey drake - > >> First of all, for commands from plugins, BOTH a python command and a > >> mel command should be made. So, both of these should be valid: > > >> // From mel: > >> mtor(...) > > >> # From python: > >> import maya.cmds > >> maya.cmds.mtor(...) > > >> Also, if you encounter problems with pymel.mel's wrapping, you can > >> always fall back on the the default maya.mel.eval, which just > >> evaluates a mel string: > > >> import maya.mel > >> maya.mel.eval('mtor ...') > > >> Thus far, I've just talked about stuff in maya's standard python/mel > >> - now onto pymel. Note that I don't have access to Renderman myself, > >> so I can't give definitive answers on the mtor command, but this > >> should point you in the right direction. > > >> In pymel, you can access the maya.cmds python function as normal: > > >> import pymel > >> pymel.mtor(...) > > >> Note, however, that if you did something like this: > > >> from pymel import * > >> loadPlugin('mtor.so') > >> mtor(...) > > >> ...you would get: > > >> # NameError: name 'mtor' is not defined # > > >> The reason here is that when you did the 'from pymel import *', the > >> 'mtor' command was not defined - you will have to either re-import * > >> into your namespace, or use pymel.mtor > > >> Making a guess at the syntax for the mtor command, the best way to > >> invoke the command you were looking for would probably be something > >> like this: > > >> mtor('control', 'getvalue', sync=True) > > >> If, for some reason, you have to use the MEL version of the command, > >> note that pymel's 'mel' wraps things using the 'function' syntax of > >> the mel command, not the 'command' syntax. If you're not clear on the > >> difference between the two, here's an example: > > >> // mel command syntax: > >> xform -q -translation; > >> // mel function syntax: > >> xform("-q", "-translation"); > > >> Thus, the correct way to invoke this command from pymel.mel would also be: > > >> pymel.mel.xform("-q", "-translation"); > > >> So, if you had to call mtor from python using the mel version, you > >> would likely do something like this: > > >> pymel.mel.mtor('control', 'getvalue', '-sync') > > >> Finally, as a last fallback, you can use pymel.mel.eval, which is just > >> a wrapper for the standard maya.mel.eval: > > >> pymel.mel.eval('mtor control getvalue -sync') > > >> On Wed, Sep 16, 2009 at 4:48 AM, Drake <[email protected]> wrote: > > >> > It's a lovely design to use 'mel.ooxx(...)' to invoke mel function as > >> > 'ooxx ...' but we encountered one special case as Pixar's mtor > >> > function. In mel, mtor's function works like these: > > >> > mtor control getvalue -sync; > >> > mtor control getvalue -rg dspyName; > >> > mtor control setvalue -rg "dspyQuantizeOne" -value $ooxx; > >> > ... > > >> > We could not directly make it work through pymel as following: > > >> > mel.mtor("control getvalue -sync") > > >> > Therefore, I did my own dirty hack on Mel class to make the above code > >> > snippet work. I am wondering what is the suggested way to invoke some > >> > mel functions like 'mtor'? > > >> > -- Drake > > --~--~---------~--~----~------------~-------~--~----~ http://groups.google.com/group/python_inside_maya -~----------~----~----~----~------~----~------~--~---
