Pythonmaya

From DreamsteepWiki

Jump to: navigation, search

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)

mayarigging

Personal tools