Maya Py
Note: most maya commands can be run over a list of nodes by adding the list to the beginning of the command
importing maya commands
from maya import cmds
node selection
# Select a node, add to the selection, and clear cmds.select("node_name") cmds.select("node_name", add=True) cmds.select(clear=True) # Get selected nodes cmds.ls(selection=True) # Get all nodes of a certain type cmds.ls(type="node_type")
Note: wildcards such as * can also be used with the ls command
working with nodes
# Create and delete cmds.createNode("node_type", name="node_name") cmds.delete("node_name") # Group nodes cmds.group(name="group_name", empty=True) cmds.parent("node_name", "group_name") # Get node type type = cmds.nodeType("node_name")
check if a node exists
if cmds.objExists("node_name"): # The node exists
add or remove nodes from a set
cmds.sets("node_name", add="set_name") cmds.sets("node_name", remove="set_name")
working with attributes
# Set an attribute cmds.setAttr("node.attr_name", "string", type="string") # Get an attribute's value value = cmds.getAttr("node.attr_name") # Get a list of all attributes on a node attrs = cmds.listAttr("node_name") # Add an attribute to a node cmds.addAttr(at="float", dv=0, max=1, min=-1, nn="Attr Name", ln="attrName")
get shape or transform nodes
shape_node = cmds.listRelatives('transform_node', type='shape', c=True)[0] transform_node = cmds.listRelatives("shape_node", type="transform", p=True)[0]
center pivot
cmds.xform("node_name", cp=True)
freeze transforms
cmds.makeIdentity(["node_name"], apply=True, t=1, r=1, s=1, n=0, pn=1)
delete history
# All construction history cmds.delete(all=True, ch=True) # Only selected ndoes cmds.delete(ch=True)
create and assign a shader
cmds.shadingNode("shader_type", name="shader_name", asShader=True) cmds.sets(name="shader_group_name", em=True, r=True, nss=True) cmds.connectAttr("shader_name.outColor", "shader_group_name.surfaceShader") cmds.hyperShade(["node_name"], assign="shader_name")
create a keyframe
cmds.setKeyframe("node_name", v=value, at="attr_name", t=frame_number)
create an expression
cmds.expression(a="node.attr_name", s="expression")
get current viewed camera
for viewport in cmds.getPanel(type="modelPanel"): camera = cmds.modelEditor(viewport, q=1, av=1, cam=1)
create a camera and image plane
cmds.camera(name="camera_name", fl=50) cmds.setAttr("camera_name.renderable", True) cmds.imagePlane(name="imageplane_name", c="camera_name") cmds.setAttr("imageplane_name.depth", 1000) # Turn the image plane off cmds.setAttr("imageplane_name.displayMode", 0) # Turn the image plane on cmds.setAttr("imageplane_name.displayMode", 3) cmds.lookThru("camera_name")
fit image plane to resolution gate
import maya.mel as mel mel.eval("source AEimagePlaneTemplate.mel") mel_command = "AEinvokeFitRezGate %s->%s.sizeX %s->%s.sizeY" % (cam, img_plane, cam, img_plane) mel.eval(mel_command)
get current file name and path
import os.path file_path = cmds.file(q=True, sn=True) file_name = os.path.basename(file_path)
set project and open a file
import maya.mel as mel mel.eval('setProject \"' + '/full/project/path' + '\"') cmds.file("file_name", o=True, f=True)
save a file under a newname
cmds.file(rename="new_name") cmds.file(force=True, save=True, type="mayaBinary")
working with references
# Create a reference cmds.file("/full/path/to/file", r=True, mnc=False, nc="namespace", op="v=0;") # Get a list of all references references = cmds.ls(type="reference") # Get a reference file path path = cmds.referenceQuery("reference_name", f=True, shn=True) # Replace a reference cmds.file("/path/to/new/reference/file", loadReference="reference_name") # Delete a reference reference = cmds.referenceQuery("reference_name", f=True) cmds.file(reference, rr=True)
export selected geometry
import os.path cmds.file("full/path/to/file.mb", op="v=0;", type="mayaBinary", pr=False, es=True)
print a result on the Maya command line
import sys sys.stdout.write("# Result: message")
raise an error
cmds.error("Error message")
To create custom tool uis for maya, use QT (or maya commands…)