pymel.tools.py2mel.py2melCmd¶
- py2melCmd(pyObj, commandName=None, register=True, includeFlags=None, excludeFlags=[], includeFlagArgs=None, excludeFlagArgs={}, nonUniqueName='warn', invalidName='warn')¶
Create a MEL command from a python function or class.
A MEL command has two types of arguments: command arguments and flag arguments. In the case of passing a function, the function’s non-keyword arguments become the command arguments and the function’s keyword arguments become the flag arguments. for example:
def makeName( first, last, middle=''): if middle: return first + ' ' + middle + ' ' + last return first + ' ' + last import pymel as pm from pymel.tools.py2mel import py2melCmd cmd = py2melCmd( makeName, 'makeNameCmd' ) pm.makeNameCmd( 'Homer', 'Simpson') # Result: Homer Simpson # pm.makeNameCmd( 'Homer', 'Simpson', middle='J.') # Result: Homer J. Simpson #
Of course, the real advantage of this tool is that now your python function is available from within MEL as a command:
makeNameCmd "Homer" "Simpson"; // Result: Homer Simpson // makeNameCmd "Homer" "Simpson" -middle "J."; // Result: Homer J. Simpson //
To remove the command, call the deregister method of the class returned by py2melCmd:
cmd.deregister()
This function attempts to automatically create short names (3 character max) based on the long names of the methods or arguments of the pass python object. It does this by looping through long names in alphabetical order and trying the following techniques until a unique short name is found:
- by docstring (methods only): check the method docstring looking for something of the form shortname: xyz::
- class Foo():
- def bar():
‘shortname: b’ # do some things return
by convention: if the name uses under_scores or camelCase, use the first letter of each “word” to generate a short name up to 3 letters long
first letter
first two letters
first three letters
first two letters plus a unique digit
Warning
if you edit the python object that is passed to this function it may result in short names changing! for example, if you have a class like the following:
class Foo(): def bar(): pass
Foo.bar will be assigned the short flag name ‘b’. but if you later add the method Foo.baa, it will be assigned the short flag name ‘b’ and ‘bar’ will be given ‘ba’. The only way to be completely sure which short name is assigned is to use the docstring method described above.
Parameters: - commandName (str) – name given to the generated MEL command
- register (bool) – whether or not to automatically register the generated command. If False, you will have to manually call the register method of the returned WrapperCommand instance
- includeFlags (list of str) – list of flags to include. if given, other flags will be ignored
- exludeFlags (list of str) – list of flags to exclude
- includeFlagArgs (dict from str to list of str) – for each flag, a list of arg names to include; if given, other args will be ignored
- excludeFlagArgs (dict from str to list of str) – for each flag, a list of arg names to exclude
- nonUniqueName (‘force’, ‘warn’, ‘skip’, or ‘error’) – what to do if a flag name is not unique
- invalidName (‘force’, ‘warn’, ‘skip’, or ‘error’) – what to do if a flag name is invalid