Friday, January 7, 2011

Passing Values Between Python and MEL

MEL to Python
MEL:
$foo="Hi"
Python:
import maya.mel as mel
foo=mel.eval("$temp=$foo")

Python to MEL
Python:
bar="Hi"
MEL:
$bar=python("bar") 

Python to/from MEL
Plugin:
import maya.OpenMaya as om
import maya.OpenMayaMPx as omMPx

nodeId = om.MTypeId(0x101118)

#node data
class user(omMPx.MPxNode):
 INPUT = om.MObject()

 def __init__(self):
  omMPx.MPxNode.__init__(self)
def userCreator():
 return omMPx.asMPxPtr( user() )
def userIniter():
 numAttr = om.MFnNumericAttribute()
 user.x = numAttr.create("x","x",om.MFnNumericData.kFloat,0.0)
 numAttr.setStorable(1)
 numAttr.setWritable(1)
 user.addAttribute(user.x)

#plugin requires
def initializePlugin(mobject):
 mplugin = omMPx.MFnPlugin(mobject)
 try:
  mplugin.registerNode("user", nodeId, userCreator, userIniter)
 except:
  print "Error loading"
  raise
def uninitializePlugin(mobject):
 mplugin = omMPx.MFnPlugin(mobject)
 try:
  mplugin.deregisterNode( nodeId )
 except:
  print "Error removing"
  raise
MEL:
if(!size(`ls "userData"`)){
    createNode "user" -name "userData";
}
setAttr "userData.x" 5;
getAttr "userData.x";
Python:
import maya.cmds as cmds
if not cmds.ls("userData"):
    myUser=cmds.createNode("user", name="userData")
cmds.setAttr("userData.x", 5)
print cmds.getAttr("userData.x")