本文整理汇总了Python中maya.cmds.expression函数的典型用法代码示例。如果您正苦于以下问题:Python expression函数的具体用法?Python expression怎么用?Python expression使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了expression函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: _buildSpeedExpression
def _buildSpeedExpression(boatWorldCtrl = ''):
"""
Builds the base expression for the boats world_ctrl speed attr
@param boatWorldCtrl: The name of the boat world_ctrl to build the expression for
@type boatWorldCtrl: String
"""
expStringList = [
'float $time;\n',
'float $translation[] = `xform -q -ws -translation "%s"`;\n' % boatWorldCtrl,
'float $trx;\n',
'float $try;\n',
'float $trz;\n',
'float $dx = $translation[0] - $trx;\n',
'float $dy = $translation[1] - $try;\n',
'float $dz = $translation[2] - $trz;\n',
'float $d = sqrt( ($dx * $dx) + ($dy * $dy) + ($dz * $dz) );\n',
'%s.speed = abs( $d / ( time - ($time + 0.001) ) );\n' % boatWorldCtrl,
'$trx = $translation[0];\n',
'$try = $translation[1];\n',
'$trz = $translation[2];\n',
'$time = time;\n'
]
## Check if the expression already exists in the scene, if so delete it
utils.checkExpressionExists( '%s_speed' % boatWorldCtrl)
## Build new expression
try:
cmds.expression(n = '%s_speed' % boatWorldCtrl.replace(':', '_'), string = utils.processExpressionString(expStringList))
except:
cmds.warning('YOU ARE USING OLD RIGS!!! PLEASE UPDATE YOUR RIGS!!!')
示例2: stabilizer
def stabilizer ():
global _camera_
_point = cmds.ls (selection = True)
if cmds.objExists ('stabilizator_expression') == False and len(_point) > 0:
_camera_ = Camera()
_point = _point[0]
if (cmds.nodeType (_point) == 'mesh' or cmds.nodeType (_point) == 'transform') and _camera_.transform != 'empty':
_expression = r'''
$pos=`python "fmmu.get_normalized_screen_position(\"''' + _point + r'''\")"`;
setAttr "''' + _camera_.shape + r'''.horizontalFilmOffset" $pos[2];
setAttr "''' + _camera_.shape + r'''.verticalFilmOffset" $pos[3];'''
print "=================================="
print _expression
cmds.expression (name = 'stabilizator_expression', string = _expression)
cmds.frameLayout ('adjustCam_frml', edit = True, visible = True)
cmds.symbolButton ('button_stabilizer', edit = True, image = 'ford_matchMoveUtilities__deStabilize.xpm', annotation = 'deStabilizer')
cmds.floatField ('field_overscan', edit = True, value = _camera_.overscan)
else:
if cmds.objExists ('stabilizator_expression') == True:
cmds.delete ('stabilizator_expression')
cmds.symbolButton ('button_stabilizer', edit = True, image = 'ford_matchMoveUtilities__stabilize.xpm', annotation = 'deStabilizer')
cmds.frameLayout ('adjustCam_frml', edit = True, collapse = True, visible = False)
try:
_camera_.reset_camera()
except:
pass
示例3: _buildNURBSPlaneExpression
def _buildNURBSPlaneExpression(NURBSPlane, xRes, zRes, oceanShader):
"""
Function to setup the expression that hooks the nurbsPlane to the ocean
@param NURBSPlane: The build of the nurbsPlane, this build command should have returned a list. Due to refactoring we're just handling this list instead of accepting the actual name
@type NURBSPlane: List
"""
## Now build the expression to connect the cv's of the NURBSPlane to the ocean
xSize = xRes+1
zSize = zRes+1
expStringList = ['float $u, $v;\n float $minx = %s.scaleX * -0.5 + %s.translateX;\n' % (NURBSPlane[0], NURBSPlane[0]),
'float $maxx = %s.scaleX * 0.5 + %s.translateX;\n' % (NURBSPlane[0], NURBSPlane[0]),
'float $minz = %s.scaleZ * -0.5 + %s.translateZ;\n' % (NURBSPlane[0], NURBSPlane[0]),
'float $maxz = %s.scaleZ * 0.5 + %s.translateZ;\n' % (NURBSPlane[0], NURBSPlane[0]),
'float $disp[] = `colorAtPoint -o A -su %s -sv %s -mu $minx -mv $minz -xu $maxx -xv $maxz %s`;\n' % (str(xSize), str(zSize), oceanShader)
]
expString = utils.processExpressionString(expStringList)
#unfold loop and use output connections
i=0
for x in range(xSize):
planeX = x * zSize
for z in range(zSize):
planeZ= zSize - z - 1
addTo = "%s.cv[%s].yv = $disp[%s];\n" % (NURBSPlane[0], str(planeX +planeZ), str(i))
expString += addTo
#increment by 1
i=i+1
## Check if the expression already exists in the scene, if so delete it
utils.checkExpressionExists( '%s_IntersectionPlane' % NURBSPlane[0])
## Build new expression
cmds.expression(n = '%s_IntersectionPlane' % '_'.join(NURBSPlane[0].split(':')), string = expString)
示例4: generate
def generate(self):
self.m_fingers = []
names = ["indexFing", "middleFing", "ringFing", "pinkyFing", "thumb"]
for i in range(len(names)):
thumb = False
if i == (len(names) - 1):
thumb = True
newFinger = fing.FingerRig(
"%s_%s" %(self.m_name, names[i]),
self.m_handJoints.getFinger(i),
thumb
)
newFinger.generate()
cmds.parent(newFinger.getGroup(), self.m_group)
self.m_fingers.append(newFinger)
#create control
self.m_control = cmds.spaceLocator(n="%s_CTRL" %(self.m_name))[0]
rc.orientControl(self.m_control, self.m_fingers[3].getKnuckle())
group = rg.addGroup(self.m_control, "%s_0" %(self.m_control))
rc.lockAttrs(self.m_control, ["tx", "rotate", "scale"], True, False)
cmds.parent(group, self.m_group)
cmds.expression(n="%s_EXP" %(self.m_name), s=self.createExp())
示例5: runPreset
def runPreset():
cmds.select(clear=True)
cmds.promptDialog(message='Nome do sistema MASH:')
mashName = cmds.promptDialog(query=True, text=True)
if not mashName:
mashName = '#'
else:
mashName = '_' + mashName
############################################################################################
steps = [ 'Selecione as instancias | n >= 2 (arraste com o botao do meio)',
'Selecione a superficie | n = 1 (arraste com o botao do meio)']
accepts = [['mesh'], ['mesh']]
############################################################################################
fx.DropWindow.getDrop( steps,
lambda data: smartPreset.send(data),
accepts=accepts)
node = yield
nodes = node.split('\n')
############################################################################################
cmds.promptDialog(message='Numero de pontos:')
pointCount = cmds.promptDialog(query=True, text=True)
try:
pointCount = int(pointCount)
except:
pointCount = 10
mash = mapi.Network()
mash.createNetwork(name='MASH' + mashName, geometry='Instancer')
node = yield
node = node.split('\n')[0]
mash.meshDistribute(node)
############################################################################################
distNodeName = mash.waiter + '_Distribute'
cmds.setAttr(distNodeName + '.pointCount', pointCount)
idNodeName = mash.waiter + '_ID'
cmds.setAttr(idNodeName + '.idtype', 2)
count = cmds.getAttr(idNodeName + '.numObjects')
pyNode = mash.addNode('MASH_Python')
cmds.addAttr(pyNode.name, longName='countID', attributeType='long', defaultValue=count)
expr = '{0}.countID = {1}.numObjects'.format(pyNode.name, idNodeName)
cmds.expression(s=expr)
cmds.addAttr(pyNode.name, longName='seed', attributeType='long', defaultValue=1234)
scriptID = ''.join(['p[{0}] = 1 # {1} prob.\n'.format(i, e) for i, e in enumerate(nodes)])
cmds.setAttr(pyNode.name + '.pyScript', SCRIPT.format(scriptID), type='string')
randNode = mash.addNode('MASH_Random')
cmds.setAttr(randNode.name + '.positionX', 0)
cmds.setAttr(randNode.name + '.positionY', 0)
cmds.setAttr(randNode.name + '.positionZ', 0)
cmds.setAttr(randNode.name + '.rotationY', 180)
cmds.setAttr(randNode.name + '.scaleX', 1)
cmds.setAttr(randNode.name + '.uniformRandom', 1)
strengthNode = mash.addNode('MASH_Strength')
yield
示例6: create
def create(self, objnum, shape="cone"):
if shape == "cone":
node = cmds.cone(ch=False, n='herdmemb')
else:
node = cmds.duplicate(shape, ic=True, n='herdmemb')
cmds.addAttr(node, sn='fad', ln='frameAdjust', dv=0, k=True)
values = herds().values()
cmds.expression(s=("$herdvar = " + str(random.random() - 0.5) + " * " + self.leader + ".rnds + " + str(objnum) + ";\n"
+ "$randfac = " + self.leader + ".stry;\n"
+ "$foc = " + self.leader + ".lf;\n"
+ "if( $foc != 0 ) {\n"
+ "$randfac *= min( 1.0,abs($herdvar)*(1-$foc)/($foc*"+ str(values["population"]) +") );}\n"
+ "$herdvar = $herdvar * -" + self.leader + ".frameOffset + frame +" + node[0] + ".frameAdjust;\n"
+ "$offset = " + str(random.random() - 0.45) + " * $randfac;\n"
+ node[0] + ".tx = $offset + `getAttr -time $herdvar " + self.leader + ".tx`;\n"
+ "$offset = " + str(random.random() - 0.45) + " * $randfac;\n"
+ node[0] + ".ty = $offset + `getAttr -time $herdvar " + self.leader + ".ty`;\n"
+ "$offset = " + str(random.random() - 0.45) + " * $randfac;\n"
+ node[0] + ".tz = $offset + `getAttr -time $herdvar " + self.leader + ".tz`;\n"
), n=(node[0] + "_herd_exp"))
# Turns off the checker for finding cycles - throws up lots of warnings without it.
cmds.cycleCheck(e=True, all=False)
self.node = node[0]
self.point()
return node
示例7: _update_flipbook_node
def _update_flipbook_node(new_page, current_frame):
""" Updates the flipbook node with a new page in the enumerator
and sets the key for that frame.
:param new_page:
:type new_page:
:returns: None
"""
# ...:
cmds.expression(object=new_page,
name="%s_visbility_EXP" % (new_page),
string="int $page = %d;\n"
"int $current_keyed_frame = flipbook_LOC.pagesToDisplay;\n"
"%s.visibility = ($page==$current_keyed_frame)||(visibilityOverride);"
% (current_frame, new_page),
alwaysEvaluate=True)
# We will also be adding another attribute with just integer values.
# This will be set here at this point as well.
cmds.setKeyframe("flipbook_LOC.pagesToDisplay",
value=current_frame,
time=current_frame,
outTangentType="step")
# Return:
return
示例8: __init__
def __init__(self, curve, objects, pointsCount, useTips = False, keepConnected = True, tangent = False,rand = False, groupit = False, animated = False ):
"""creates objects allong curve,
curve: Curve Class object that handles the curve
objects: Array of one o more transforms objects to position allong curve
pointsCount: Amount of points in the curve
useTips: is to position objects in the curve
keepConnected: Keep pointOnCurveInfo connected between transform and curve
tangent: Manage rotation on objects also
rand: Place the objects in random order
animated: Add speed attribute to move objects along curve"""
self._nodes = []
self._curve = curve
if useTips:
val = -1
else:
val = 1
startParam = 1.0 / ( pointsCount + val )
param = 0
objsIter = it.bicycle( objects )
grp = mn.Node( curve.name + '_grp' )
if groupit:
grp = mn.Node( mc.group( n = grp.name, em = True ) )
if animated:
grp.a.laps.add( k = True )
with undo.Undo():
for p in range( pointsCount ):
#place transform in param point
if not useTips:
param += startParam
if rand:
baseobj = random.choice( objects )
else:
baseobj = objsIter.next()
obj = baseobj.duplicate()
self._nodes.append( obj )
if groupit:
obj.parent = grp
pcurveNode = mn.Node( mc.pathAnimation( obj.name, su=0.5, c=curve.name, fm = True, follow=tangent, followAxis = 'z', upAxis = 'y', worldUpType = 'object', worldUpObject = curve.parent.name ) )
animCurve = pcurveNode.a.uValue.input.node
animCurve.delete()
if keepConnected:
obj.a.parameter.add( k = True )
obj.a.parameter.v = param
obj.a.parameter.min = 0
obj.a.parameter.max = 1
obj.a.parameter >> pcurveNode.a.uValue
else:
if param > 1.0:
param = 1
pcurveNode.a.uValue.v = param
t = obj.a.t.v
r = obj.a.r.v
pcurveNode.delete()
obj.a.t.v = t[0]
obj.a.r.v = r[0]
if useTips:
param += startParam
if animated:
cmd = obj.a.parameter.fullname + ' = ( abs( ' + str( obj.a.parameter.v ) + ' + ' + grp.a.laps.fullname + ' ) ) % 1;'
mc.expression( s=cmd )
示例9: customizeCamera
def customizeCamera(self, camera):
cmds.lookThru(camera)
cmds.addAttr(camera, ln="Overlay", at="enum", en="No Overlay:Grid:SpiralTopRight:SpiralTopLeft:SpiralBottomRight:SpiralBottomLeft")
cmds.addAttr(camera, ln="Overlay_Value", at="long")
cmds.setAttr(camera + '.Overlay', e=True, keyable=True)
cmds.setAttr(camera + '.Overlay_Value', e=True, keyable=True)
cmds.expression(s='int $a=%s.Overlay;\r\n' % camera +
'%s.Overlay_Value=$a;' % camera+
'switch($a) { \r\n' +
' case 0: \r\n' +
' python("camera_overlays.Overlay_Function().noOverlay()"); \r\n' +
' break;\r\n' +
' case 1: \r\n' +
' python("camera_overlays.Overlay_Function().toggleThirdsGrid()"); \r\n' +
' break;\r\n' +
' case 2: \r\n' +
' python("camera_overlays.Overlay_Function().toggleGoldenSprialTopRight()"); \r\n' +
' break;\r\n' +
' case 3: \r\n' +
' python("camera_overlays.Overlay_Function().toggleGoldenSprialTopLeft()"); \r\n' +
' break;\r\n' +
' case 4: \r\n' +
' python("camera_overlays.Overlay_Function().toggleGoldenSprialBottomRight()"); \r\n' +
' break;\r\n' +
' case 5: \r\n' +
' python("camera_overlays.Overlay_Function().toggleGoldenSprialBottomLeft()"); \r\n' +
'}select %s;\r' % camera, ae=False, o="renderCam")
示例10: stabilizer
def stabilizer (task):
camera = Camera()
point = cmds.ls (selection = True)
if task == 'end':
# turn off stab
expression = str (cmds.expression ('stabilizator_expression', string = True, query = True))
camera.shape = expression[2:expression.find('#')]
cmds.delete ('stabilizator_expression')
camera.reset_camera ()
cmds.button ('button_stabilizer',
edit = True,
label = 'stabilize',
backgroundColor = (0, 0.5, 0),
command = 'fstab.stabilizer("start")')
else:
# start stab
if cmds.objExists ('stabilizator_expression'):
# stabilizator exists
expression = str (cmds.expression ('stabilizator_expression', string = True, query = True))
camera.shape = expression[2:expression.find('#')]
cmds.delete ('stabilizator_expression')
cmds.select (camera.shape, replace = True)
cmds.warning (('>>> STAB WAS TURNED ON. CHECK: ' + camera.shape + ' <<< FOR NONZERO OFFSET VALUES ::..'))
else:
if cmds.nodeType (point) != 'mesh' and cmds.nodeType (point) != 'transform' and len (point) == 0:
# wrong selection
cmds.warning ('..:: SELECT SOMETHING TO STABILIZE ::..')
else:
point = point[0]
if point != camera.transform and point != camera.shape and camera.transform != 'empty':
# stabilize
cmds.setAttr( camera.shape + '.displayResolution', 0)
cmds.setAttr( camera.shape + '.displayFilmGate', 0)
expression = '//%s#' % camera.shape
expression += '\npython "import maya.cmds as cmds";'
expression += '\npython "fov_h = cmds.camera (\'%s\', query = True, horizontalFieldOfView = True)";' % camera.shape
expression += '\npython "fov_v = cmds.camera (\'%s\', query = True, verticalFieldOfView = True)";' % camera.shape
expression += '\npython "aperture_h = cmds.camera (\'%s\', query = True, horizontalFilmAperture = True)";' % camera.shape
expression += '\npython "aperture_v = cmds.camera (\'%s\', query = True, verticalFilmAperture = True)";' % camera.shape
expression += '\n$pos=`python "fstab.get_normalized_screen_position(\'%s\',\'%s\',fov_h, fov_v,aperture_h,aperture_v)"`;' % (point, camera.transform)
expression += '\nsetAttr "%s.horizontalFilmOffset" ($pos[2]);' % camera.shape
expression += '\nsetAttr "%s.verticalFilmOffset" ($pos[3]);' % camera.shape
# create expression
cmds.expression (name = 'stabilizator_expression', string = expression)
# update GUI
cmds.button ('button_stabilizer',
edit = True,
label ="deStabilize",
backgroundColor = (1, 0, 0),
command = 'fstab.stabilizer("end")')
else:
cmds.warning ('..:: CLICK IN THE PANE WITH THE CAMERA ::..')
示例11: mirror_locators
def mirror_locators(**kwargs):
file_name = kwargs.setdefault('filename')
unmirror = kwargs.setdefault('unmirror', False)
file_list = ['up_eye', 'low_eye', 'cheek', 'up_mouth', 'low_mouth']
if unmirror is False:
if file_name == 'all':
for i in range(0, len(file_list)):
file_path = get_file_path('expressions/%s' % file_list[i])
with open(file_path) as myfile:
expressionData = myfile.read()
mc.expression(string=expressionData, name="%s_Expression" % file_list[i], ae=1, uc='all')
py.headsUpMessage('Mirroring for all enabled. Must unmirror to reset locations')
else:
file_path = get_file_path('expressions/%s' % file_name)
with open(file_path) as myfile:
expressionData = myfile.read()
mc.expression(string=expressionData, name="%s_Expression" % file_name, ae=1, uc='all')
py.headsUpMessage('Mirroring for %s enabled. Must unmirror to reset locations' % file_name)
else:
for i in range(0, len(file_list)):
try:
mc.delete('%s_Expression' % file_list[i])
except:
pass
py.headsUpMessage('Mirroring disabled')
示例12: turntable
def turntable():
"""
Main function. Creates turntable. Requires a list of selected objects.
:return: None
"""
objs = cmds.ls(selection=True)
meshes = checkSelection(objs)
if not meshes:
cmds.error('Please select a mesh object')
pivlist = getSelectionPivot(meshes)
turnCam = createCamera()
centroid = findCentroid(pivlist)
# change camera pivot to centroid
cmds.xform(turnCam[0], ws=True, piv=centroid)
# animate camera. rotate around y axis.
firstFrame = str(cmds.playbackOptions(q=True, minTime=True))
lastFrame = str(cmds.playbackOptions(q=True, maxTime=True))
cmds.expression(name='TurnTableExpression',
string='{0}.rotateY=360*(frame-{1})/{2}-{1};'.format(turnCam[0],
firstFrame, lastFrame))
# create a 3 point light rig.
keyLight = createLight('areaLight', 'key', centroid)
fillLight = createLight('areaLight', 'fill', centroid)
rimLight = createLight('areaLight', 'rim', centroid)
cmds.lookThru(turnCam[0])
示例13: editMainExpression
def editMainExpression(objectName="", splashDisc="", oceanShader="", objectNameEmitter="", wakeEmitter="", splashDiscEmitter=""):
"""
editing the main expression for the scene
@param splashDiscParticle: Name of SplashDiscParticle
@type splashDiscParticle: String
--------------------------------------------
@return: 0-ExpressionText
"""
oldMainExoression = cmds.expression("ocean_MainExpression",query=True, string=True)
startExpression = "\n////////////////////////////// Start %s Expression //////////////////////////////\n"%objectName
newExp = ""
newExp += "float $%s_particleSprayRate = 3000;\n"%objectName
newExp += "float $%s_particleBubblesRate = 100;\n" %objectName
newExp += "float $%s_fluidDisplacement = 6.0;\n" %objectName
newExp += "float $%s_fluidFoam = 2.0;\n" %objectName
newExp += "float $%s_u = .I[0];\n" %objectName
newExp += "float $%s_v = .I[1];\n" %objectName
newExp += "float $%s_disp[] = `colorAtPoint -u $%s_u -v $%s_v %s`;\n" %(objectName,objectName,objectName,oceanShader)
newExp += "float $%s_lastY = `getAttr -time (frame - 2) %s.translateY`;\n" %(objectName,objectName)
newExp += "float $%s_curY = %s.translateY;\n" %(objectName,objectName)
newExp += "float $%s_ydiff = $%s_lastY - $%s_curY;\n" %(objectName,objectName,objectName)
newExp += "if( $%s_curY < 0.5 ){\n\t"%objectName
newExp += "%s.rate = $%s_particleBubblesRate;"%(objectNameEmitter,objectName)
newExp += "\n} else {\n\t"
newExp += "%s.rate = 0;\n}\n"%objectNameEmitter
newExp += "if( $%s_ydiff < 0 ){\n\t"%objectName
newExp += "$%s_ydiff = -$%s_ydiff;"%(objectName,objectName)
newExp += "\n}\n"
newExp += "if( $%s_curY > -1 && $%s_curY < 0.6 ){\n\t"%(objectName,objectName)
newExp += "%s.fluidDensityEmission = $%s_fluidDisplacement;\n\t"%(wakeEmitter,objectName)
newExp += "%s.fluidHeatEmission = $%s_fluidFoam;"%(wakeEmitter,objectName)
newExp += "\n} else {\n\t"
newExp += "%s.fluidDensityEmission = 0;\n\t"%wakeEmitter
newExp += "%s.fluidHeatEmission = 0;"%wakeEmitter
newExp += "\n}\n"
newExp += "if( $%s_curY > -1 && $%s_curY < 0.5 && $%s_ydiff > 0.05 ){\n\t"%(objectName,objectName,objectName)
newExp += "%s.rate = $%s_particleSprayRate * $%s_ydiff;\n\t"%(splashDiscEmitter,objectName,objectName)
newExp += "float $%s_speed = $%s_ydiff * 10;\n\t"%(objectName,objectName)
newExp += "if( $%s_speed > 10 ){\n\t\t"%objectName
newExp += "$%s_speed = 10;"%objectName
newExp += "\n\t}\n\t"
newExp += "%s.speed = $%s_speed;"%(splashDiscEmitter,objectName)
newExp += "\n} else {\n\t"
newExp += "%s.rate = 0;"%splashDiscEmitter
newExp += "\n}\n"
newExp += "%s.translateY = $%s_disp[0];\n"%(splashDisc,objectName)
newExp += "float $%s_dummy = %s.displacement;\n"%(objectName,oceanShader)
endExpression = "////////////////////////////// End %s Expression //////////////////////////////\n\n"%objectName
totalExp = oldMainExoression+startExpression+newExp+endExpression
cmds.expression ("ocean_MainExpression",string=totalExp ,edit=True, alwaysEvaluate=1, unitConversion="all")
return totalExp
示例14: connectAttrs
def connectAttrs(newObj,oldObj):
#r = str(0.7)
for attr in attrs:
#if attr=='translateX':
# #scale translateX
# cmds.expression(s = newObj+'.' +attr+ ' = ' + r + '*' + oldObj+'.' +attr)
#else:
cmds.expression(s = newObj+'.' +attr+ ' = ' + oldObj+'.' +attr)
示例15: loop_selection
def loop_selection(num_loops, step=1):
""" Loop over selected pages num_loop times.
With the pages selected in the maya scene, loop over the pages
num_loop times with step amount of frames between each loop.
And some...
:param num_loops: The page to display.
:param step: The number of frames between the loop.
:type num_loops: int.
:type step: int.
:returns: List.
:raises: None.
.. note::
There is a Maya Expression declared in this function as a string.
This could be removed to another file and use something like Jinja
to work with it.
"""
# If there are pages selected:
pages = cmds.ls(selection=True)
if pages:
regex = re.compile(r"page_(\d{4})")
page_vals = [int(regex.search(page).group(1)) for page in pages]
inc_value = (page_vals[-1] + step) - page_vals[0]
page_loop = [page_vals[i] + (j * inc_value) for j in xrange(num_loops) for i in xrange(len(page_vals))]
#
page_array = ""
# Set the expression now:
for index, page in enumerate(page_vals):
page_name = "page_%04d" % (page)
expr_name = "page_%04d_visbility_EXP" % (page)
if cmds.objExists(expr_name):
cmds.delete(expr_name)
# Reads the expression from the ./templates folder and fills
# in the values before setting the expression on the curves
# for that given page:
exp = open(os.path.join(TEMPLATE_DIR, 'flipbookexpression.mel'), 'r').read()
exp = exp % {'values': ','.join(map(str, page_loop[index::len(page_vals)])),
'end_values': ','.join(map(str, page_loop[index + 1::len(page_vals)])),
'page': page,
'page_name': page_name}
cmds.expression(object=page_name,
name=expr_name,
string=exp,
alwaysEvaluate=True)
go_to_page(page_vals[-1] + 1)
page_name = "page_%04d" % (page_vals[-1] + 1)
set_empty_page()
# Return the loop list:
return page_loop