Pythonmaya
From DreamsteepWiki
Contents |
Maya 2009 Python Tricks
ADD A STRING ATTR TO A NODE
import maya.cmds as cmds objectname='ball' newattr = 'rainbow' datavalue = 'bright' cmds.addAttr(objectname,ln=newattr, dt="string") cmds.setAttr((objectname+'.'+newattr),e=True,keyable=True) cmds.setAttr((objectname+'.'+newattr),datavalue,type="string") print cmds.getAttr(objectname+'.'+newattr )
BUILD AN ASSET AND ADD AN OBJECT
loc = cmds.spaceLocator() con1 = cmds.container(addNode=[loc[0]])
# Create a container holding a polygon shape, its transform and its # history node. Publish its tx attr. # cone = cmds.polyCone() con2 = cmds.container(addNode=[cone[0]],includeNetwork=True,includeHierarchyBelow=True) # Publish the cone's tx and the locator's tx with the same name # cmds.container(con1,edit=True,publishName='main_tx') cmds.container(con1,edit=True,bindAttr=['%s.tx' % loc[0],'main_tx']) cmds.container(con2,edit=True,publishName='main_tx') cmds.container(con2,edit=True,bindAttr=['%s.tx' % cone[0],'main_tx'])
Maya 8.5 Python tricks
Running commands
reload( module )
import maya.cmds as cmds cmds.about( )
ADD
def addATTR(self,node,attrname,datatype):
cmds.addAttr(node ,longName=attrname, attributeType=datatype)
cmds.setAttr( (node+'.'+attrname), keyable=True )
SET
#untested
def setATTR(self,node,attrname,value):
cmds.setAttr( (node+'.'+attrname),value )
GET
setup PATHS
to append a path to PATH
import sys
sys.path.append('C:/SMA/pyth/')
#TO SEE IT
sys.path
to get an absolute world transform this only works with a "frozen" transfrom
place = cmds.xform('ee',q=True,rp=True)
foo = cmds.sphere(n='crap')
cmds.move(place[0],place[1],place[2],foo,ws=True)
######################################################################################
ADD JOINTS INTO A JOINT
def addJoints(self,joint,num):
tmps =[]
newj =''
fpos =[]
spos =[]
npos =[3]
##
first = joint
tmps = cmds.listRelatives(first,typ='joint')
second = tmps[0]
rad=cmds.getAttr( (first+'.radius') )
fpos=cmds.xform(first,ws=True,q=True,t=True)
spos=cmds.xform(second,ws=True,q=True,t=True)
for n in range(num):
newj=cmds.insertJoint(first)
npos = [3]
npos[0]=spos[0]+(((fpos[0]-spos[0])/(num+1))*(n+1))
npos.append(spos[1]+(((fpos[1]-spos[1])/(num+1))*(n+1)) )
npos.append(spos[2]+(((fpos[2]-spos[2])/(num+1))*(n+1)) )
cmds.joint(newj,p=[npos[0],npos[1],npos[2]],e=True,co=True)
cmds.setAttr( (newj+'.radius') ,rad)
MAKE A FRACTAL TREE IN MAYA
import maya.cmds as cmds
def makecircle(name):
return cmds.circle( nr=(0,1,0),n=name )
##
def stackloft(stack):
cmds.select(clear=True)
for element in stack:
print element
cmds.select(element,add=True)
cmds.loft( ch=False, rn=True, ar=True )
##
def stack(scale,rx,ry,rz,nameofcurve,number):
output =[]
movedist = 1 #this will determine branch length
a = 0
dupeinit = cmds.duplicate(nameofcurve,name='foo')
cmds.scale(scale,scale,scale ,dupeinit,relative=True)
cmds.rotate(rx,ry,rz ,dupeinit,relative=True)
while a <= number:
duper = cmds.duplicate(dupeinit,name='foo')
cmds.move(0,(movedist*a),0, duper, relative=True, objectSpace=True, worldSpaceDistance=True )
output.append(duper)
a=a+1
cmds.delete(dupeinit)
return output
##
def maketree(curve,depth,maxdepth):
if depth==maxdepth:
return
numberinstack = 5
taperfactor = .7
slant = 35
#trunk
if depth==0:
stax = stack(taperfactor,0,0,0,curve,numberinstack)
laststack= stax[numberinstack]
stackloft(stax)
if depth>0:
#branchone
stax = stack(taperfactor,slant ,0 ,0 ,curve,numberinstack)
laststack= stax[numberinstack]
#debug
stackloft(stax)
stax = stack(taperfactor,slant ,120,0,curve,numberinstack)
laststacktwo= stax[numberinstack]
stackloft(stax)
stax = stack(taperfactor,slant ,270,0,curve,numberinstack)
laststackthree= stax[numberinstack]
stackloft(stax)
maketree(laststack ,depth+1,maxdepth)
if depth>0:
maketree(laststacktwo ,depth+1,maxdepth)
maketree(laststackthree,depth+1,maxdepth)
##
foo=makecircle('stack_')
maketree(foo,0,3)

