Oops accident replied to the wrong person :-) I formatted this into a gist so its readable: https://gist.github.com/1110257
On Jul 27, 12:39 am, 张宇 <[email protected]> wrote: > class fn: > def eye_rig(self, eyeObj,eyeTarget,controllers): > "Create EyeRig weighted between target (via aimContraint) and > animation override" > > # Create control hierarchy of groups or locators: > #controllers = ['anim','aim','out'] > controlsList = [] > testing = 0 > > # For each controller, create a locator and add it to the list of > controllers > for control in controllers: > objTmp = eyeObj+'_'+control > cmds.spaceLocator(n=objTmp) > controlsList.append(objTmp) > > #Final control (last item in list) will receive all the rotations > and pass them to the eye via parentConstraint. > # It will have UD attrs to weight inputs of other controls > finalControl = controlsList[-1] > > # For each controller, we'll create a multDiv. We pipe the > control's rotation into the md, weight it w/UD attr on 'out' object. > # Rotations coming out of multDivs are added w/pma node and passed > to 'out' object > > # Create pma node first, so md can be connected when created: > sumNodeTmp = cmds.createNode('plusMinusAverage',n=eyeObj+'eyeRo > t_sum') > print 'sumNodeTmp:',sumNodeTmp > > # Summed rotations piped into 'out.rotate' (This is the last item in > the 'controlsList' List): > cmds.connectAttr(sumNodeTmp+'.output3D',finalControl > +'.rotate',force=1) > > # Create _md node for each controller rotations, pipe intorotation > sum > count = 0 > while count < (len(controlsList)-1): > nodeTmp = controlsList[count] > attrTmp = controllers[count] > print 'nodeTmp:',nodeTmp > # For each controller, create a MultDiv to weight the rotation. > # They will be weighted by a custom attr on the 'out' object: > mdTmp = cmds.createNode('multiplyDivide',n=nodeTmp+'_md') > # Connect rotations to multDiv.input1 (more rotationinfluences > can be added) > cmds.connectAttr(nodeTmp+'.rotate',mdTmp+'.input1' ,force=1) > # Pipe the md output to the rotation sum: > > connectAttr(mdTmp+'.output',sumNodeTmp+'.input3D['+str(count)+']',force=1) > > # Create UD attrs on 'out' (last item in list)to weight > therotations of each controller. > # Pipe UD into the corresponding md nodes. > > # Create UD Attrs on 'out' > > cmds.addAttr(finalControl,ln=attrTmp,min=0,max=1,dv=1,at='float') > cmds.setAttr (finalControl+'.'+attrTmp, e=1, keyable=1)# Ifnot > keyable, won't show in channel box > # Connect Anim, Aim to inputs of respective multDiv: > connectAttrsTmp =['2X','2Y','2Z'] > for tmpConnectAttr in connectAttrsTmp: > > cmds.connectAttr(finalControl+'.'+attrTmp,mdTmp+'.input'+tmpConnectAttr) > > # If test, offset the controllers for visual testing: > if testing: > cmds.setAttr(nodeTmp+'.translateX',count+0.5) > count += 1 > > # Group the controllers > eyeRigGroupTmp = cmds.group(controlsList, n = eyeObj+'_eyeDir_grp') > > # Position the eyeRig at the eye > self.parentUnparent (eyeObj,eyeRigGroupTmp) > > # Setup aimConstraint for eye > cmds.aimConstraint (eyeTarget,eyeObj+'_aim',offset = [0, 0, 0],w = > 1, aimVector = [1,0,0], upVector = [0,1,0], worldUpType ='vector', > worldUpVector = [0,1,0]) > > # Constrain Eye to "out" control > cmds.parentConstraint (eyeObj,finalControl, offset = (0, 0,0 ), w = > 1) > > def parentUnparent(self, parent,children): > # Use temporary point-, scale- constraints to snap parent tofuture > child > delete( cmds.pointConstraint (parent, children, offset = (0, 0,0 ), > w = 1) ) > delete( cmds.orientConstraint (parent, children, offset = (0,0, 0 ), > w = 1) ) > delete( cmds.scaleConstraint (parent, children, offset = (1, 1,1 ), > w = 1) ) > ins = fn() > ins.eye_rig('testX_eyeL','testX_eyeL_tgt',['anim','aim','out']) > > 2011/7/27 PixelMuncher <[email protected]> > > > > > > > > > > > Hi all: > > Perhaps this is too much to ask, but I've been studying up on Python > > classes and trying to figure out how to use them in my Maya Coding. I > > haven't found any good Maya examples. > > If someone has a few minutes , maybe you could show how this eye > > rigging code could be written as a class? > > Thanks much. > > > def eye_rig(eyeObj,eyeTarget,controllers): > > "Create EyeRig weighted between target (via aimContraint) and > > animation override" > > > # Create control hierarchy of groups or locators: > > #controllers = ['anim','aim','out'] > > controlsList = [] > > testing = 0 > > > # For each controller, create a locator and add it to the list > > of controllers > > for control in controllers: > > objTmp = eyeObj+'_'+control > > cmds.spaceLocator(n=objTmp) > > controlsList.append(objTmp) > > > #Final control (last item in list) will receive all the > > rotations and pass them to the eye via parentConstraint. > > # It will have UD attrs to weight inputs of other controls > > finalControl = controlsList[-1] > > > # For each controller, we'll create a multDiv. We pipe the > > control's rotation into the md, weight it w/UD attr on 'out' object. > > # Rotations coming out of multDivs are added w/pma node and > > passed to 'out' object > > > # Create pma node first, so md can be connected when created: > > sumNodeTmp = cmds.createNode('plusMinusAverage',n=eyeObj > > +'eyeRo t_sum') > > print 'sumNodeTmp:',sumNodeTmp > > > # Summed rotations piped into 'out.rotate' (This is the last > > item in the 'controlsList' List): > > cmds.connectAttr(sumNodeTmp+'.output3D',finalContr ol > > +'.rotate',force=1) > > > # Create _md node for each controller rotations, pipe into > > rotation sum > > count = 0 > > while count < (len(controlsList)-1): > > nodeTmp = controlsList[count] > > attrTmp = controllers[count] > > print 'nodeTmp:',nodeTmp > > # For each controller, create a MultDiv to weight the > > rotation. > > # They will be weighted by a custom attr on the 'out' > > object: > > mdTmp = cmds.createNode('multiplyDivide',n=nodeTmp+'_md') > > # Connect rotations to multDiv.input1 (more rotation > > influences can be added) > > cmds.connectAttr(nodeTmp+'.rotate',mdTmp > > +'.input1' ,force=1) > > # Pipe the md output to the rotation sum: > > connectAttr(mdTmp+'.output',sumNodeTmp > > +'.input3D['+str(count)+']',force=1) > > > # Create UD attrs on 'out' (last item in list)to weight the > > rotations of each controller. > > # Pipe UD into the corresponding md nodes. > > > # Create UD Attrs on 'out' > > cmds.addAttr(finalControl,ln=attrTmp,min=0,max=1,d > > v=1,at='float') > > cmds.setAttr (finalControl+'.'+attrTmp, e=1, keyable=1)# If > > not keyable, won't show in channel box > > # Connect Anim, Aim to inputs of respective multDiv: > > connectAttrsTmp =['2X','2Y','2Z'] > > for tmpConnectAttr in connectAttrsTmp: > > cmds.connectAttr(finalControl+'.'+attrTmp,mdTmp+'. > > input'+tmpConnectAttr) > > > # If test, offset the controllers for visual testing: > > if testing: > > cmds.setAttr(nodeTmp+'.translateX',count+0.5) > > count += 1 > > > # Group the controllers > > eyeRigGroupTmp = cmds.group(controlsList, n = eyeObj > > +'_eyeDir_grp') > > > # Position the eyeRig at the eye > > parentUnparent (eyeObj,eyeRigGroupTmp) > > > # Setup aimConstraint for eye > > cmds.aimConstraint (eyeTarget,eyeObj+'_aim',offset = [0, 0, 0], > > w = 1, aimVector = [1,0,0], upVector = [0,1,0], worldUpType = > > 'vector', worldUpVector = [0,1,0]) > > > # Constrain Eye to "out" control > > cmds.parentConstraint (eyeObj,finalControl, offset = (0, 0, > > 0 ), w = 1) > > > def parentUnparent(parent,children): > > # Use temporary point-, scale- constraints to snap parent to > > future child > > delete( cmds.pointConstraint (parent, children, offset = (0, 0, > > 0 ), w = 1) ) > > delete( cmds.orientConstraint (parent, children, offset = (0, > > 0, 0 ), w = 1) ) > > delete( cmds.scaleConstraint (parent, children, offset = (1, 1, > > 1 ), w = 1) ) > > > eye_rig('testX_eyeL','testX_eyeL_tgt',['anim','aim','out']) > > > -- > > view archives:http://groups.google.com/group/python_inside_maya > > change your subscription settings: > >http://groups.google.com/group/python_inside_maya/subscribe > > --http://thatboy.me -- view archives: http://groups.google.com/group/python_inside_maya change your subscription settings: http://groups.google.com/group/python_inside_maya/subscribe
