Hi! I have a problem with my Python script - for some reasons I can’t make my script undoable. Any advice?
import maya.cmds as cmds
import random as random
import math as math
getSelectedCurves = []
getDuplicatedObjects = []
getSelectedShaders = []
seed_radius = 0
seed_mats = 0
seed_inst = 0
cmds.undoInfo( state=True, infinity=True )
def bake_curves(*args):
objects = cmds.ls(sl=True)
del getSelectedCurves[:]
for item in objects:
getSelectedCurves.append(item)
print getSelectedCurves
def bake_duplicated_objs(*args):
dups = cmds.ls(sl=True)
del getDuplicatedObjects[:]
for item in dups:
getDuplicatedObjects.append(item)
print getDuplicatedObjects
def bake_shaders(*args):
shaders = cmds.ls(sl=True)
del getSelectedShaders[:]
for item in shaders:
getSelectedShaders.append(item)
print getSelectedShaders
def path_attach(scalemin, scalemax):
dupsCount = len(getDuplicatedObjects)
shaderCount = len(getSelectedShaders)
cmds.undoInfo(openChunk=True, cn="Placement") # Here undo chunk must start
for item in getSelectedCurves:
randScale = random.uniform( scalemin, scalemax )
randShader = random.uniform( 0, shaderCount )
mat_idx = int(randShader)
randNumber = random.uniform(0,dupsCount)
inst_idx = int(randNumber)
instancedObj = cmds.instance(getDuplicatedObjects[inst_idx])
cmds.scale(randScale, randScale, randScale, instancedObj)
#set arnold parameters
cmds.setAttr(item+".aiRenderCurve", 1)
cmds.setAttr(item+".aiCurveWidth", randScale)
cmds.setAttr(item+".aiMode", 1)
#node_to_dicsonnect = cmds.connectionInfo(item+".aiCurveShader", sourceFromDestination = True)
try:
cmds.connectAttr(getSelectedShaders[mat_idx]+".outColor", item+".aiCurveShader", force=True)
except:
pass
maxval = cmds.getAttr( item+".maxValue" )
cmds.undoInfo(swf=False)
pathanim = cmds.pathAnimation( instancedObj, curve=item, follow = 1, ua="z", fa="y",su=maxval )
cmds.disconnectAttr(pathanim+"_uValue.output", pathanim+".uValue")
cmds.undoInfo(swf=True)
cmds.undoInfo(closeChunk=True) # And here it must end.
def UI():
cmds.window('Rand That Shader!', mxb=False, sizeable=False)
cmds.frameLayout('Controls', borderStyle = 'in', w=400)
cmds.columnLayout(w=150)
cmds.button("Bake Curves", w=150, h=35, align='center',c=bake_curves)
cmds.button("Bake Shader", w=150, h=35, align='center', c=bake_shaders)
cmds.button("Bake Duplicated Objs", w=150, h=35, align='center', c=bake_duplicated_objs)
cmds.button('Path Attach', w=150, h=35, align='center',backgroundColor=[0.992, 0.776, 0.517], c='PathDuplicator.path_attach(scalemin,scalemax)') #
cmds.setParent('..')
cmds.showWindow()