Message 1 of 4
Python Scripting Trouble
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
Hello!
I am new to coding in Maya and Python and I am looking to better my understanding.
In the provided code, I have received multiple Value Errors, Type Errors and Maya Command errors. I am not entirely sure why and I have been struggling with it for a while.
Any and all suggestions are largely appreciated!
import maya.cmds as cmds
# Define function for cleanup
def cleanUp():
if cmds.objExists('tre*'):
cmds.delete('tre*')
# Define function for creating a tree model
def modelTree(i):
pfx = f'tre{i}_'
# tree trunk
trunk = cmds.polyCylinder(n=f'tre{i}_trunk', r=0.4, h=4, sa=8, sh=16)
cmds.move(0, 2, 0)
cmds.polyTriangulate(trunk)
cmds.polySoftEdge(trunk, a=0)
# first layer of leaves
cmds.polyCone(n=f'tre{i}_leaf1',r=1,h=2,sa=8,sh=4)
cmds.move(0,4,0)
cmds.scale(2,2,2)
cmds.Triangulate(n=f'tre{i}_leaf1')
cmds.polyMoveVertex(n=f'tre{i}_leaf1',random=True,ltz=0.110)
cmds.polySoftEdge(a=0)
# second layer of leaves
cmds.polyCone(n=f'tre{i}_leaf2',r=1,h=2,sa=8,sh=4)
cmds.move(0,5.5,0)
cmds.scale(1.5,1.5,1.5)
cmds.Triangulate(n=f'tre{i}_leaf2')
cmds.polyMoveVertex(n=f'tre{i}_leaf2',random=True,ltz=0.115)
cmds.polySoftEdge(a=0)
# third layer of leaves
cmds.polyCone(n=f'tre{i}_leaf3',r=1,h=2,sa=8,sh=4)
cmds.move(0,6.5,0)
cmds.scale(1,1,1)
cmds.Triangulate(n=f'tre{i}_leaf3')
cmds.polyMoveVertex(n=f'tre{i}_leaf3',random=True,ltz=0.120)
cmds.polySoftEdge(a=0)
# Freeze transformations and delete history
cmds.FreezeTransformations()
cmds.DeleteHistory()
# Define function for making shaders
def makeShaders(i):
pfx = f'tre{i}_'
# shader argument for tree trunk
trunkSN = cmds.shadingNode('blinn',asShader=True,n=f'tre{i}_trunk_SN')
cmds.setAttr(f'tre{i}_trunk_SN.color',0.137,0.098,0.259)
cmds.select(f'tre{i}_trunk')
cmds.hyperShade(a=f'tre{i}_trunk_SN')
# shader argument for first layer of leaves
leaf1SN = cmds.shadingNode('blinn',asShader=True,n=f'tre{i}_leaf1_SN')
cmds.setAttr(f'tre{i}_leaf1_SN.color',0.369,0.329,0.557)
cmds.select(f'tre{i}_leaf1')
cmds.hyperShade(a=f'tre{i}_leaf1_SN')
# shader argument for second layer of leaves
leaf2SN = cmds.shadingNode('blinn',asShader=True,n=f'tre{i}_leaf2_SN')
cmds.setAttr(f'tre{i}_leaf2_SN.color',0.623,0.525,0.753)
cmds.select(f'tre{i}_leaf2')
cmds.hyperShade(a=f'tre{i}_leaf2_SN')
# shader argument for third layer of leaves
leaf3SN = cmds.shadingNode('blinn',asShader=True,n=f'tre{i}_leaf3_SN')
cmds.setAttr(f'tre{i}_leaf3_SN.color',0.878,0.694,0.796)
cmds.select(f'tre{i}_leaf3')
cmds.hyperShade(a=f'tre{i}_leaf3_SN')
# Define function for creating skeleton
def sansSkeleton(i):
pfx = f'tre{i}_'
cmds.select(cl=True)
for j in range(6): # Changed loop variable to avoid conflict
cmds.joint(n=f'tre{i}_{j+1}_jnt')
cmds.jointDisplayScale(0.5)
cmds.move(0, 0.8, 0, r=True, os=True, wd=True)
# Freeze transformations and delete history
cmds.FreezeTransformations()
cmds.DeleteHistory()
# Define function for making groups
def makeGroups(i):
pfx = f'tre{i}_*'
cmds.select(cl=True)
for j in range(6): # Changed loop variable to avoid conflict
if cmds.objExists(f'tre{j}_*'): # Checking if object exists before selection
cmds.select(f'tre{j}_*', add=True)
cmds.group(n=f'tre{j}_tree')
for i in range(6): # Changed loop variable to avoid conflict
if cmds.objExists(f'tre{i}_*'): # Checking if object exists before selection
cmds.select(f'tre{i}_*', add=True)
cmds.group(n=f'tre{i}_tree')
# Define function for parenting groups
def makePgroup(i):
pfx = f'tre{i}_*'
for j in range(6): # Changed loop variable to avoid conflict
if cmds.objExists(f'tre{j}_tree*'): # Checking if object exists before parenting
cmds.parent(f'tre{j}_tree')
# Define function to run tree creation process
def runTree(i):
modelTree(i)
makeShaders(i)
sansSkeleton(i)
# Cleanup existing objects
cleanUp()
# Create trees
for i in range(6):
runTree(i)
makeGroups(i)
makePgroup(i)