Advertisement
Guest User

Untitled

a guest
Jun 24th, 2011
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 89.43 KB | None | 0 0
  1. import maya.cmds as cmds
  2.  
  3. class Dummy:
  4.     def __init__(self):
  5.         pass
  6.     def build(self, *args):
  7.         nSide = 'L_'
  8.         nJnt = '_JNT'
  9.         nIK = '_IK'
  10.         nFK = '_FK'
  11.         nNB = '_NB'
  12.         nRL = '_RL'
  13.         nGrp = '_GRP'
  14.         nSDK = '_SDK'
  15.         n0 = '_0'
  16.         nCrv = '_CRV'
  17.         nClst = '_CLST'
  18.         nLoc = '_LOC'
  19.  
  20.         # RIGGING UTILITIES
  21.        
  22.         def crLocs(lPos, lName):
  23.             '''
  24.            creates self.locators, specify position then name, eg. crLocs((0,0,0), 'testLoc')
  25.            '''
  26.             locate = cmds.spaceLocator(n = nSide + lName + nLoc)[0]
  27.             cmds.move(lPos[0], lPos[1], lPos[2])
  28.             return locate
  29.        
  30.         def crGrp(objX, nameX):
  31.             grp = cmds.group(objX, n = nSide + nameX + nGrp)
  32.             return grp
  33.        
  34.         def crDup(objZ, nameZ):
  35.             dupe = cmds.duplicate(objZ, n = nSide + nameZ + nLoc)[0]
  36.             return dupe
  37.        
  38.         def crInst(objY, nameY):
  39.             inst = cmds.instance(objY, n = nSide + nameY + nGrp)
  40.             return inst
  41.  
  42.  
  43.  
  44.         def crCrv(objA, objB):
  45.             '''
  46.            creates a curve from one object to another, give object A then object B
  47.            '''
  48.             pointA = cmds.xform(objA, ws = True, q = True, t = True)
  49.             pointB = cmds.xform(objB, ws = True, q = True, t = True)
  50.             curveLoc = cmds.curve(d = 1, p = [(pointA), (pointB)], n = nSide + objA + '_' + objB + nCrv)
  51.             clstA = cmds.cluster(curveLoc + '.cv[0]', n = nSide + objA + nClst)[1]
  52.             clstAGrp = cmds.group(clstA, n = clstA + nGrp)
  53.             cmds.parentConstraint(objA, clstA, mo = True)
  54.             cmds.setAttr(clstA + '.visibility', 0)
  55.             clstB = cmds.cluster(curveLoc + '.cv[1]', n = nSide + objA + nClst)[1]
  56.             clstBGrp = cmds.group(clstB, n = clstB + nGrp)
  57.             cmds.parentConstraint(objB, clstB, mo = True)
  58.             cmds.setAttr(clstB + '.visibility', 0)
  59.             cmds.setAttr(curveLoc + '.template', 1)
  60.             cmds.parent(curveLoc, clstBGrp, clstAGrp, tempSideCurves)
  61.             return curveLoc
  62.        
  63.         ### GENERATE HIERARCHIES
  64.         self.charName = cmds.textFieldGrp(self.charNameUI, q = True, tx = True) + '_'
  65.  
  66.        
  67.         if not cmds.objExists('*rootNode_GRP'):
  68.             rootNode = cmds.group(em = True, n=charName + 'rootNode_GRP')
  69.         else:
  70.             cmds.error('Hierarchy Exists - Clean up your Scene')
  71.            
  72.         self.grpNodes = {}
  73.         ctrlNode = cmds.group(em = True, n=charName + 'ctrl_GRP')
  74.         self.grpNodes['ctrlNode'] = ctrlNode
  75.         rigNode = cmds.group(em = True, n=charName + 'rig_GRP_doNotTouch')
  76.         self.grpNodes['rigNode'] = rigNode
  77.         geoNode = cmds.group(em = True, n=charName + 'geo_GRP')
  78.         self.grpNodes['geoNode'] = geoNode
  79.         extrasNode = cmds.group(em = True, n=charName + 'extras_GRP')
  80.         self.grpNodes['extrasNode'] = extrasNode
  81.         crvNode = cmds.group(em = True, n=charName + 'crv_GRP')
  82.         self.grpNodes['crvNode'] = crvNode
  83.         ikHNode = cmds.group(em = True, n=charName + 'ikH_GRP')
  84.         self.grpNodes['ikHNode'] = ikHNode
  85.         skelNode = cmds.group(em = True, n=charName + 'skeleton_GRP')
  86.         self.grpNodes['skelNode'] = skelNode
  87.         tempDummy = cmds.group(em = True, n=charName + 'dummy_GRP')
  88.         self.grpNodes['tempDummy'] = tempDummy
  89.         tempLocs = cmds.group(em = True, n=charName + 'dummy_locs_GRP')
  90.         self.grpNodes['tempLocs'] = tempLocs
  91.         tempSideCurves = cmds.group(em = True, n=charName + 'dummy_side_curves_GRP_DONOTTOUCH')
  92.         self.grpNodes['tempSideCurves'] = tempSideCurves
  93.         cmds.parent(ctrlNode, rigNode, rootNode)
  94.         cmds.parent(skelNode, geoNode, extrasNode, rigNode)
  95.         cmds.parent(ikHNode, crvNode, extrasNode)
  96.         cmds.parent(tempLocs, tempSideCurves, tempDummy)
  97.        
  98.         self.globalCtrl = cmds.circle(radius = 10, nr = (0,1,0), n=charName + 'globalControl_ctrl', ch = False)[0]
  99.         cmds.setAttr(self.globalCtrl + '.translateX', lock = True, keyable = False, channelBox = False)
  100.         cmds.setAttr(self.globalCtrl + '.translateY', lock = True, keyable = False, channelBox = False)
  101.         cmds.setAttr(self.globalCtrl + '.translateZ', lock = True, keyable = False, channelBox = False)
  102.         cmds.setAttr(self.globalCtrl + '.rotateX', lock = True, keyable = False, channelBox = False)
  103.         cmds.setAttr(self.globalCtrl + '.rotateY', lock = True, keyable = False, channelBox = False)
  104.         cmds.setAttr(self.globalCtrl + '.rotateZ', lock = True, keyable = False, channelBox = False)
  105.         cmds.setAttr(self.globalCtrl + '.visibility', lock = True, keyable = False, channelBox = False)
  106.         self.gScale = cmds.addAttr(self.globalCtrl, ln = 'globalScale', at = 'double', min = 0.0000001, dv = 1)
  107.         cmds.setAttr(self.globalCtrl + '.globalScale', e = True, keyable = True)
  108.         cmds.connectAttr(self.globalCtrl + '.globalScale', self.globalCtrl + '.scaleX')
  109.         cmds.connectAttr(self.globalCtrl + '.globalScale', self.globalCtrl + '.scaleY')
  110.         cmds.connectAttr(self.globalCtrl + '.globalScale', self.globalCtrl + '.scaleZ')
  111.         cmds.setAttr(self.globalCtrl + '.scaleX', lock = True, keyable = False, channelBox = False)
  112.         cmds.setAttr(self.globalCtrl + '.scaleY', lock = True, keyable = False, channelBox = False)
  113.         cmds.setAttr(self.globalCtrl + '.scaleZ', lock = True, keyable = False, channelBox = False)
  114.  
  115.  
  116.        
  117.  
  118.  
  119.         self.layerNodes = {}
  120.  
  121.  
  122.         rigLayer = cmds.createDisplayLayer(n = '_rig_DONOTTOUCH', empty = True)
  123.         self.layerNodes['rigLayer'] = rigLayer
  124.         geoLayer = cmds.createDisplayLayer(n = '_geo', empty = True)
  125.         self.layerNodes['geoLayer'] = geoLayer
  126.        
  127.         rightControlsLayer = cmds.createDisplayLayer(n = '_rightControls', empty = True)
  128.         self.layerNodes['rightControlsLayer'] = rightControlsLayer
  129.         cmds.setAttr(rightControlsLayer + '.color', 4)
  130.        
  131.         leftControlsLayer = cmds.createDisplayLayer(n = '_leftControls', empty = True)
  132.         self.layerNodes['leftControlsLayer'] = leftControlsLayer
  133.         cmds.setAttr(leftControlsLayer + '.color', 29)
  134.        
  135.         centerControlsLayer = cmds.createDisplayLayer(n = '_centerControls', empty = True)
  136.         self.layerNodes['centerControlsLayer'] = centerControlsLayer
  137.         cmds.setAttr(centerControlsLayer + '.color', 22)
  138.        
  139.         cmds.editDisplayLayerMembers(centerControlsLayer, self.globalCtrl)
  140.        
  141.        
  142.         cmds.parentConstraint(self.globalCtrl, tempLocs, mo = True)
  143.         cmds.scaleConstraint(self.globalCtrl, tempLocs, mo = True)
  144.        
  145.  
  146.        
  147.         ### LIST FOR ALL self.locators
  148.        
  149.         self.locators = {}
  150.        
  151.         ### CREATE SPINE LOCS
  152.        
  153.         nSide = ''
  154.        
  155.         rootLocs = {}
  156.         self.locators['rootLocs'] = rootLocs
  157.        
  158.        
  159.        
  160.         hips = crLocs((0,10,0), 'hips')
  161.         rootLocs['hips'] = hips
  162.        
  163.        
  164.         chest = crLocs((0,23,0), 'chest')
  165.         rootLocs['chest'] = chest
  166.        
  167.        
  168.        
  169.         ### CREATE LEFT ARM LOCS
  170.        
  171.         nSide = 'L_'
  172.        
  173.        
  174.         leftArmLocs = {}
  175.         self.locators['leftArmLocs'] = leftArmLocs
  176.        
  177.        
  178.         lClav = crLocs((3,23.5,0), 'clav')
  179.         leftArmLocs['lClav'] = lClav
  180.        
  181.        
  182.         lShldr = crLocs((5,25,0), 'shldr')
  183.         leftArmLocs['lShldr'] = lShldr
  184.        
  185.        
  186.         lElbow = crLocs((10,25,0), 'elbow')
  187.         leftArmLocs['lElbow'] = lElbow
  188.        
  189.        
  190.         lWrist = crLocs((15,25,0), 'wrist')
  191.         leftArmLocs['lWrist'] = lWrist
  192.        
  193.        
  194.        
  195.        
  196.         ### CREATE LEFT HAND LOCS
  197.        
  198.         # index
  199.        
  200.         lIndA = crLocs((18,25,2), 'indA')
  201.         leftArmLocs['lIndA'] = lIndA
  202.        
  203.         lIndB = crLocs((19,25,2), 'indB')
  204.         leftArmLocs['lIndB'] = lIndB
  205.        
  206.         lIndC = crLocs((20,25,2), 'indC')
  207.         leftArmLocs['lIndC'] = lIndC
  208.        
  209.         lIndD = crLocs((21,25,2), 'indD')
  210.         leftArmLocs['lIndD'] = lIndD
  211.        
  212.         # middle
  213.         if cmds.radioButtonGrp('fingRadio', q = True, sl = True) >=2:
  214.             lMidA = crLocs((18,25,1), 'midA')
  215.             leftArmLocs['lMidA'] = lMidA
  216.        
  217.             lMidB = crLocs((19,25,1), 'midB')
  218.             leftArmLocs['lMidB'] = lMidB
  219.        
  220.             lMidC = crLocs((20,25,1), 'midC')
  221.             leftArmLocs['lMidC'] = lMidC
  222.        
  223.             lMidD = crLocs((21,25,1), 'midD')
  224.             leftArmLocs['lMidD'] = lMidD
  225.  
  226.        
  227.         # ring
  228.         if cmds.radioButtonGrp('fingRadio', q = True, sl = True) >=3:
  229.             lRngA = crLocs((18,25,0), 'rngA')
  230.             leftArmLocs['lRngA'] = lRngA
  231.        
  232.             lRngB = crLocs((19,25,0), 'rngB')
  233.             leftArmLocs['lRngB'] = lRngB
  234.        
  235.             lRngC = crLocs((20,25,0), 'rngC')
  236.             leftArmLocs['lRngC'] = lRngC
  237.        
  238.             lRngD = crLocs((21,25,0), 'rngD')
  239.             leftArmLocs['lRngD'] = lRngD
  240.        
  241.         # pinky
  242.         if cmds.radioButtonGrp('fingRadio', q = True, sl = True) >=4:
  243.             lPnkA = crLocs((18,25,-1), 'pnkA')
  244.             leftArmLocs['lPnkA'] = lPnkA
  245.        
  246.             lPnkB = crLocs((19,25,-1), 'pnkB')
  247.             leftArmLocs['lPnkB'] = lPnkB
  248.        
  249.             lPnkC = crLocs((20,25,-1), 'pnkC')
  250.             leftArmLocs['lPnkC'] = lPnkC
  251.        
  252.             lPnkD = crLocs((21,25,-1), 'pnkD')
  253.             leftArmLocs['lPnkD'] = lPnkD
  254.            
  255.  
  256.        
  257.         # thumb
  258.        
  259.         lThbA = crLocs((16.5,25,2), 'thbA')
  260.         leftArmLocs['lThbA'] = lThbA
  261.        
  262.         lThbB = crLocs((16.5,25,3), 'thbB')
  263.         leftArmLocs['lThbB'] = lThbB
  264.        
  265.         lThbC = crLocs((16.5,25,4), 'thbC')
  266.         leftArmLocs['lThbC'] = lThbC
  267.        
  268.         lThbD = crLocs((16.5,25,5), 'thbD')
  269.         leftArmLocs['lThbD'] = lThbD
  270.        
  271.        
  272.         ### CREATE  LEFT LEG LOCS
  273.        
  274.         leftLegLocs = {}
  275.         self.locators['leftLegLocs'] = leftLegLocs
  276.        
  277.        
  278.         lHip = crLocs((4,10,0), 'hip')
  279.         leftLegLocs['lHip'] = lHip
  280.        
  281.         lKnee = crLocs((4,6,0), 'knee')
  282.         leftLegLocs['lKnee'] = lKnee
  283.        
  284.         lAnkle = crLocs((4,2,0), 'ankle')
  285.         leftLegLocs['lAnkle'] = lAnkle
  286.        
  287.         lBall = crLocs((4,1,2), 'ball')
  288.         leftLegLocs['lBall'] = lBall
  289.        
  290.         lToe = crLocs((4,0,4), 'toe')
  291.         leftLegLocs['lToe'] = lToe
  292.        
  293.         lHeel = crLocs((4,0,0), 'heel')
  294.         leftLegLocs['lHeel'] = lHeel
  295.        
  296.        
  297.         ### CREATE RIGHT ARM INSTANCE LOCS
  298.  
  299.        
  300.        
  301.         nSide = 'R_'
  302.        
  303.         rightArmLocs = []
  304.         self.locators['rightArmLocs'] = rightArmLocs
  305.        
  306.        
  307.        
  308.         ### MIRROR
  309.        
  310.        
  311.         rClav = crDup(lClav, 'clav')
  312.         rightArmLocs.append(rClav)
  313.        
  314.         rShldr = crDup(lShldr, 'shldr')
  315.         rightArmLocs.append(rShldr)
  316.        
  317.         rElbow = crDup(lElbow, 'elbow')
  318.         rightArmLocs.append(rElbow)
  319.        
  320.         rWrist = crDup(lWrist, 'wrist')
  321.         rightArmLocs.append(rWrist)
  322.        
  323.        
  324.        
  325.        
  326.         rIndA = crDup(lIndA, 'indA')
  327.         rightArmLocs.append(rIndA)
  328.        
  329.         rIndB = crDup(lIndB, 'indB')
  330.         rightArmLocs.append(rIndB)
  331.        
  332.         rIndC = crDup(lIndC, 'indC')
  333.         rightArmLocs.append(rIndC)
  334.        
  335.         rIndD = crDup(lIndD, 'indD')
  336.         rightArmLocs.append(rIndD)
  337.        
  338.        
  339.        
  340.         try:
  341.             rMidA = crDup(lMidA, 'midA')
  342.             rightArmLocs.append(rMidA)
  343.        
  344.             rMidB = crDup(lMidB, 'midB')
  345.             rightArmLocs.append(rMidB)
  346.        
  347.             rMidC = crDup(lMidC, 'midC')
  348.             rightArmLocs.append(rMidC)
  349.        
  350.             rMidD = crDup(lMidD, 'midD')
  351.             rightArmLocs.append(rMidD)
  352.         except NameError:
  353.             pass
  354.        
  355.         try:
  356.             rRngA = crDup(lRngA, 'rngA')
  357.             rightArmLocs.append(rRngA)
  358.        
  359.             rRngB = crDup(lRngB, 'rngB')
  360.             rightArmLocs.append(rRngB)
  361.        
  362.             rRngC = crDup(lRngC, 'rngC')
  363.             rightArmLocs.append(rRngC)
  364.        
  365.             rRngD = crDup(lRngD, 'rngD')
  366.             rightArmLocs.append(rRngD)
  367.         except NameError:
  368.             pass
  369.            
  370.            
  371.         try:
  372.             rPnkA = crDup(lPnkA, 'pnkA')
  373.             rightArmLocs.append(rPnkA)
  374.            
  375.             rPnkB = crDup(lPnkB, 'pnkB')
  376.             rightArmLocs.append(rPnkB)
  377.            
  378.             rPnkC = crDup(lPnkC, 'pnkC')
  379.             rightArmLocs.append(rPnkC)
  380.            
  381.             rPnkD = crDup(lPnkD, 'pnkD')
  382.             rightArmLocs.append(rPnkD)
  383.         except NameError:
  384.             pass
  385.        
  386.         rThbA = crDup(lThbA, 'thbA')
  387.         rightArmLocs.append(rThbA)
  388.        
  389.         rThbB = crDup(lThbB, 'thbB')
  390.         rightArmLocs.append(rThbB)
  391.        
  392.         rThbC = crDup(lThbC, 'thbC')
  393.         rightArmLocs.append(rThbC)
  394.        
  395.         rThbD = crDup(lThbD, 'thbD')
  396.         rightArmLocs.append(rThbD)
  397.        
  398.        
  399.        
  400.        
  401.         rightLegLocs = []
  402.         self.locators['rightLegLocs'] = rightLegLocs
  403.        
  404.        
  405.        
  406.         rHip = crDup(lHip, 'hip')
  407.         rightLegLocs.append(rHip)
  408.        
  409.         rKnee = crDup(lKnee, 'knee')
  410.         rightLegLocs.append(rKnee)
  411.        
  412.         rAnkle = crDup(lAnkle, 'ankle')
  413.         rightLegLocs.append(rAnkle)
  414.        
  415.         rBall = crDup(lBall, 'ball')
  416.         rightLegLocs.append(rBall)
  417.        
  418.         rToe = crDup(lToe, 'toe')
  419.         rightLegLocs.append(rToe)
  420.        
  421.         rHeel = crDup(lHeel, 'heel')
  422.         rightLegLocs.append(rHeel)
  423.        
  424.        
  425.         nSide = 'L_'
  426.        
  427.         ### set attributes on self.locators
  428.         print leftArmLocs
  429.         print leftArmLocs.iterkeys
  430.         for sc in leftArmLocs.iterkeys():
  431.             cmds.setAttr(leftArmLocs[sc] + '.scaleX', lock = True, keyable = False)
  432.             cmds.setAttr(leftArmLocs[sc] + '.scaleY', lock = True, keyable = False)
  433.             cmds.setAttr(leftArmLocs[sc] + '.scaleZ', lock = True, keyable = False)
  434.             cmds.setAttr(leftArmLocs[sc] + '.visibility', lock = True, keyable = False)
  435.        
  436.         for loc in leftArmLocs.iterkeys():
  437.             locShapes = cmds.listRelatives(leftArmLocs[loc], shapes = True)[0]
  438.             cmds.setAttr(locShapes + '.overrideEnabled', 1)
  439.             cmds.setAttr(locShapes + '.overrideColor', 14)
  440.             cmds.setAttr(locShapes + '.localPositionX', lock = True, keyable = False, channelBox = False)
  441.             cmds.setAttr(locShapes + '.localPositionY', lock = True, keyable = False, channelBox = False)
  442.             cmds.setAttr(locShapes + '.localPositionZ', lock = True, keyable = False, channelBox = False)
  443.             cmds.setAttr(locShapes + '.localScaleX', .25, lock = True, keyable = False, channelBox = False)
  444.             cmds.setAttr(locShapes + '.localScaleY', .25, lock = True, keyable = False, channelBox = False)
  445.             cmds.setAttr(locShapes + '.localScaleZ', .25, lock = True, keyable = False, channelBox = False)
  446.        
  447.        
  448.         for sc in rightArmLocs:
  449.             cmds.setAttr(sc + '.scaleX', lock = True, keyable = False)
  450.             cmds.setAttr(sc + '.scaleY', lock = True, keyable = False)
  451.             cmds.setAttr(sc + '.scaleZ', lock = True, keyable = False)
  452.             cmds.setAttr(sc + '.visibility', lock = True, keyable = False)
  453.             cmds.setAttr(sc + '.template', 1)
  454.        
  455.         for loc in rightArmLocs:
  456.             locShapes = cmds.listRelatives(loc, shapes = True)[0]
  457.             cmds.setAttr(locShapes + '.overrideEnabled', 1)
  458.             cmds.setAttr(locShapes + '.overrideColor', 14)
  459.             cmds.setAttr(locShapes + '.localPositionX', lock = True, keyable = False, channelBox = False)
  460.             cmds.setAttr(locShapes + '.localPositionY', lock = True, keyable = False, channelBox = False)
  461.             cmds.setAttr(locShapes + '.localPositionZ', lock = True, keyable = False, channelBox = False)
  462.             cmds.setAttr(locShapes + '.localScaleX', .25, lock = True, keyable = False, channelBox = False)
  463.             cmds.setAttr(locShapes + '.localScaleY', .25, lock = True, keyable = False, channelBox = False)
  464.             cmds.setAttr(locShapes + '.localScaleZ', .25, lock = True, keyable = False, channelBox = False)
  465.        
  466.         for sc in rootLocs.iterkeys():
  467.             cmds.setAttr(rootLocs[sc] + '.scaleX', lock = True, keyable = False)
  468.             cmds.setAttr(rootLocs[sc] + '.scaleY', lock = True, keyable = False)
  469.             cmds.setAttr(rootLocs[sc] + '.scaleZ', lock = True, keyable = False)
  470.             cmds.setAttr(rootLocs[sc] + '.visibility', lock = True, keyable = False)
  471.        
  472.         for loc in rootLocs.iterkeys():
  473.             locShapes = cmds.listRelatives(rootLocs[loc], shapes = True)[0]
  474.             cmds.setAttr(locShapes + '.overrideEnabled', 1)
  475.             cmds.setAttr(locShapes + '.overrideColor', 6)
  476.             cmds.setAttr(locShapes + '.localPositionX', lock = True, keyable = False, channelBox = False)
  477.             cmds.setAttr(locShapes + '.localPositionY', lock = True, keyable = False, channelBox = False)
  478.             cmds.setAttr(locShapes + '.localPositionZ', lock = True, keyable = False, channelBox = False)
  479.             cmds.setAttr(locShapes + '.localScaleX', .25, lock = True, keyable = False, channelBox = False)
  480.             cmds.setAttr(locShapes + '.localScaleY', .25, lock = True, keyable = False, channelBox = False)
  481.             cmds.setAttr(locShapes + '.localScaleZ', .25, lock = True, keyable = False, channelBox = False)
  482.        
  483.         for sc in leftLegLocs.iterkeys():
  484.             cmds.setAttr(leftLegLocs[sc] + '.scaleX', lock = True, keyable = False)
  485.             cmds.setAttr(leftLegLocs[sc] + '.scaleY', lock = True, keyable = False)
  486.             cmds.setAttr(leftLegLocs[sc] + '.scaleZ', lock = True, keyable = False)
  487.             cmds.setAttr(leftLegLocs[sc] + '.visibility', lock = True, keyable = False)
  488.        
  489.        
  490.        
  491.         for loc in leftLegLocs:
  492.             locShapes = cmds.listRelatives(leftLegLocs[loc], shapes = True)[0]
  493.             cmds.setAttr(locShapes + '.overrideEnabled', 1)
  494.             cmds.setAttr(locShapes + '.overrideColor', 13)
  495.             cmds.setAttr(locShapes + '.localPositionX', lock = True, keyable = False, channelBox = False)
  496.             cmds.setAttr(locShapes + '.localPositionY', lock = True, keyable = False, channelBox = False)
  497.             cmds.setAttr(locShapes + '.localPositionZ', lock = True, keyable = False, channelBox = False)
  498.             cmds.setAttr(locShapes + '.localScaleX', .25, lock = True, keyable = False, channelBox = False)
  499.             cmds.setAttr(locShapes + '.localScaleY', .25, lock = True, keyable = False, channelBox = False)
  500.             cmds.setAttr(locShapes + '.localScaleZ', .25, lock = True, keyable = False, channelBox = False)
  501.        
  502.        
  503.        
  504.        
  505.         for sc in rightLegLocs:
  506.             cmds.setAttr(sc + '.scaleX', lock = True, keyable = False)
  507.             cmds.setAttr(sc + '.scaleY', lock = True, keyable = False)
  508.             cmds.setAttr(sc + '.scaleZ', lock = True, keyable = False)
  509.             cmds.setAttr(sc + '.visibility', lock = True, keyable = False)
  510.             cmds.setAttr(sc + '.template', 1)
  511.        
  512.         for loc in rightLegLocs:
  513.             locShapes = cmds.listRelatives(loc, shapes = True)[0]
  514.             cmds.setAttr(locShapes + '.overrideEnabled', 1)
  515.             cmds.setAttr(locShapes + '.overrideColor', 13)
  516.             cmds.setAttr(locShapes + '.localPositionX', lock = True, keyable = False, channelBox = False)
  517.             cmds.setAttr(locShapes + '.localPositionY', lock = True, keyable = False, channelBox = False)
  518.             cmds.setAttr(locShapes + '.localPositionZ', lock = True, keyable = False, channelBox = False)
  519.             cmds.setAttr(locShapes + '.localScaleX', .25, lock = True, keyable = False, channelBox = False)
  520.             cmds.setAttr(locShapes + '.localScaleY', .25, lock = True, keyable = False, channelBox = False)
  521.             cmds.setAttr(locShapes + '.localScaleZ', .25, lock = True, keyable = False, channelBox = False)
  522.        
  523.        
  524.        
  525.        
  526.         ### PARENTING ###
  527.        
  528.        
  529.         cmds.parent(lClav, chest)
  530.         cmds.parent(lShldr, chest)
  531.         cmds.parent(lElbow, lShldr)
  532.         cmds.parent(lWrist, lElbow)
  533.         cmds.parent(lIndA, lWrist)
  534.         cmds.parent(lIndB, lIndA)
  535.         cmds.parent(lIndC, lIndB)
  536.         cmds.parent(lIndD, lIndC)
  537.         try:
  538.             cmds.parent(lMidA, lWrist)
  539.         except NameError:
  540.             pass
  541.         try:            
  542.             cmds.parent(lMidB, lMidA)
  543.         except NameError:
  544.             pass
  545.         try:            
  546.             cmds.parent(lMidC, lMidB)
  547.         except NameError:
  548.             pass
  549.         try:            
  550.             cmds.parent(lMidD, lMidC)
  551.         except NameError:
  552.             pass
  553.         try:            
  554.             cmds.parent(lRngA, lWrist)
  555.         except NameError:
  556.             pass
  557.         try:            
  558.             cmds.parent(lRngB, lRngA)
  559.         except NameError:
  560.             pass
  561.         try:            
  562.             cmds.parent(lRngC, lRngB)
  563.         except NameError:
  564.             pass
  565.         try:            
  566.             cmds.parent(lRngD, lRngC)
  567.         except NameError:
  568.             pass
  569.         try:            
  570.             cmds.parent(lPnkA, lWrist)
  571.         except NameError:
  572.             pass
  573.         try:            
  574.             cmds.parent(lPnkB, lPnkA)
  575.         except NameError:
  576.             pass
  577.         try:            
  578.             cmds.parent(lPnkC, lPnkB)
  579.         except NameError:
  580.             pass
  581.         try:            
  582.             cmds.parent(lPnkD, lPnkC)
  583.         except NameError:
  584.             pass
  585.  
  586.         cmds.parent(lThbA, lWrist)
  587.         cmds.parent(lThbB, lThbA)
  588.         cmds.parent(lThbC, lThbB)
  589.         cmds.parent(lThbD, lThbC)
  590.         cmds.parent(lHip, hips)
  591.         cmds.parent(lKnee, lHip)
  592.         cmds.parent(lAnkle, lHip)
  593.         cmds.parent(lBall, lAnkle)
  594.         cmds.parent(lToe, lBall)
  595.         cmds.parent(lHeel, lToe)
  596.            
  597.            
  598.         cmds.parent(rClav, chest)
  599.         cmds.parent(rShldr, chest)
  600.         cmds.parent(rElbow, rShldr)
  601.         cmds.parent(rWrist, rElbow)
  602.         cmds.parent(rIndA, rWrist)
  603.         cmds.parent(rIndB, rIndA)
  604.         cmds.parent(rIndC, rIndB)
  605.         cmds.parent(rIndD, rIndC)
  606.         try:
  607.             cmds.parent(rMidA, rWrist)
  608.         except NameError:
  609.             pass
  610.         try:
  611.             cmds.parent(rMidB, rMidA)
  612.         except NameError:
  613.             pass
  614.         try:            
  615.             cmds.parent(rMidC, rMidB)
  616.         except NameError:
  617.             pass
  618.         try:            
  619.             cmds.parent(rMidD, rMidC)
  620.         except NameError:
  621.             pass
  622.         try:            
  623.             cmds.parent(rRngA, rWrist)
  624.         except NameError:
  625.             pass
  626.         try:            
  627.             cmds.parent(rRngB, rRngA)
  628.         except NameError:
  629.             pass
  630.         try:            
  631.             cmds.parent(rRngC, rRngB)
  632.         except NameError:
  633.             pass
  634.         try:            
  635.             cmds.parent(rRngD, rRngC)
  636.         except NameError:
  637.             pass
  638.         try:            
  639.             cmds.parent(rPnkA, rWrist)
  640.         except NameError:
  641.             pass
  642.         try:            
  643.             cmds.parent(rPnkB, rPnkA)
  644.         except NameError:
  645.             pass
  646.         try:            
  647.             cmds.parent(rPnkC, rPnkB)
  648.         except NameError:
  649.             pass
  650.         try:            
  651.             cmds.parent(rPnkD, rPnkC)
  652.         except NameError:
  653.             pass
  654.         cmds.parent(rThbA, rWrist)
  655.         cmds.parent(rThbB, rThbA)
  656.         cmds.parent(rThbC, rThbB)
  657.         cmds.parent(rThbD, rThbC)
  658.         cmds.parent(rHip, hips)
  659.         cmds.parent(rKnee, rHip)
  660.         cmds.parent(rAnkle, rHip)
  661.         cmds.parent(rBall, rAnkle)
  662.         cmds.parent(rToe, rBall)
  663.         cmds.parent(rHeel, rToe)
  664.        
  665.         cmds.parent(chest, hips)
  666.        
  667.        
  668.         cmds.parent(hips, tempLocs)
  669.         cmds.parent(self.globalCtrl, ctrlNode)
  670.  
  671.  
  672.        
  673.         ###
  674.         ###
  675.         ###
  676.         ### HOOKING UP MULTIPLY DIVIDES ###
  677.         ###
  678.         ###
  679.         ###
  680.         ###
  681.        
  682.         self.killM = []
  683.         # clavicle
  684.        
  685.         tranMDrClav = cmds.shadingNode('multiplyDivide', asUtility = True, n = rClav + '_translate' + '_md')
  686.         rotMDrClav = cmds.shadingNode('multiplyDivide', asUtility = True, n = rClav + '_rotate' + '_md')
  687.         scaleMDrClav = cmds.shadingNode('multiplyDivide', asUtility = True, n = rClav + '_scale' + '_md')
  688.        
  689.         self.killM.append(tranMDrClav)
  690.         self.killM.append(rotMDrClav)
  691.         self.killM.append(scaleMDrClav)
  692.        
  693.         cmds.setAttr(tranMDrClav + '.input2X', -1)
  694.         cmds.setAttr(rotMDrClav + '.input2Z', -1)
  695.         cmds.setAttr(rotMDrClav + '.input2Y', -1)
  696.        
  697.         cmds.connectAttr(lClav + '.translate', tranMDrClav + '.input1', force = True)
  698.         cmds.connectAttr(tranMDrClav + '.output', rClav + '.translate', force = True)
  699.        
  700.         cmds.connectAttr(lClav + '.rotate', rotMDrClav + '.input1', force = True)
  701.         cmds.connectAttr(rotMDrClav + '.output', rClav + '.rotate', force = True)
  702.        
  703.         cmds.connectAttr(lClav + '.scale', scaleMDrClav + '.input1', force = True)
  704.         cmds.connectAttr(scaleMDrClav + '.output', rClav + '.scale', force = True)
  705.        
  706.         # shoulder
  707.        
  708.        
  709.        
  710.         tranMDrShldr = cmds.shadingNode('multiplyDivide', asUtility = True, n = rShldr + '_translate' + '_md')
  711.         rotMDrShldr = cmds.shadingNode('multiplyDivide', asUtility = True, n = rShldr + '_rotate' + '_md')
  712.         scaleMDrShldr = cmds.shadingNode('multiplyDivide', asUtility = True, n = rShldr + '_scale' + '_md')
  713.        
  714.         self.killM.append(tranMDrShldr)
  715.         self.killM.append(rotMDrShldr)
  716.         self.killM.append(scaleMDrShldr)
  717.        
  718.         cmds.setAttr(tranMDrShldr + '.input2X', -1)
  719.         cmds.setAttr(rotMDrShldr + '.input2Z', -1)
  720.         cmds.setAttr(rotMDrShldr + '.input2Y', -1)
  721.        
  722.         cmds.connectAttr(lShldr + '.translate', tranMDrShldr + '.input1', force = True)
  723.         cmds.connectAttr(tranMDrShldr + '.output', rShldr + '.translate', force = True)
  724.        
  725.         cmds.connectAttr(lShldr + '.rotate', rotMDrShldr + '.input1', force = True)
  726.         cmds.connectAttr(rotMDrShldr + '.output', rShldr + '.rotate', force = True)
  727.        
  728.         cmds.connectAttr(lShldr + '.scale', scaleMDrShldr + '.input1', force = True)
  729.         cmds.connectAttr(scaleMDrShldr + '.output', rShldr + '.scale', force = True)
  730.        
  731.        
  732.         # elbow
  733.        
  734.        
  735.        
  736.         tranMDrElbow = cmds.shadingNode('multiplyDivide', asUtility = True, n = rElbow + '_translate' + '_md')
  737.         rotMDrElbow = cmds.shadingNode('multiplyDivide', asUtility = True, n = rElbow + '_rotate' + '_md')
  738.         scaleMDrElbow = cmds.shadingNode('multiplyDivide', asUtility = True, n = rElbow + '_scale' + '_md')
  739.        
  740.         self.killM.append(tranMDrElbow)
  741.         self.killM.append(rotMDrElbow)
  742.         self.killM.append(scaleMDrElbow)
  743.        
  744.         cmds.setAttr(tranMDrElbow + '.input2X', -1)
  745.         cmds.setAttr(rotMDrElbow + '.input2Z', -1)
  746.         cmds.setAttr(rotMDrElbow + '.input2Y', -1)
  747.        
  748.         cmds.connectAttr(lElbow + '.translate', tranMDrElbow + '.input1', force = True)
  749.         cmds.connectAttr(tranMDrElbow + '.output', rElbow + '.translate', force = True)
  750.        
  751.         cmds.connectAttr(lElbow + '.rotate', rotMDrElbow + '.input1', force = True)
  752.         cmds.connectAttr(rotMDrElbow + '.output', rElbow + '.rotate', force = True)
  753.        
  754.         cmds.connectAttr(lElbow + '.scale', scaleMDrElbow + '.input1', force = True)
  755.         cmds.connectAttr(scaleMDrElbow + '.output', rElbow + '.scale', force = True)
  756.        
  757.        
  758.        
  759.         # wrist
  760.        
  761.        
  762.         tranMDrWrist = cmds.shadingNode('multiplyDivide', asUtility = True, n = rWrist + '_translate' + '_md')
  763.         rotMDrWrist = cmds.shadingNode('multiplyDivide', asUtility = True, n = rWrist + '_rotate' + '_md')
  764.         scaleMDrWrist = cmds.shadingNode('multiplyDivide', asUtility = True, n = rWrist + '_scale' + '_md')
  765.        
  766.         self.killM.append(tranMDrWrist)
  767.         self.killM.append(rotMDrWrist)
  768.         self.killM.append(scaleMDrWrist)
  769.        
  770.         cmds.setAttr(tranMDrWrist + '.input2X', -1)
  771.         cmds.setAttr(rotMDrWrist + '.input2Z', -1)
  772.         cmds.setAttr(rotMDrWrist + '.input2Y', -1)
  773.        
  774.         cmds.connectAttr(lWrist + '.translate', tranMDrWrist + '.input1', force = True)
  775.         cmds.connectAttr(tranMDrWrist + '.output', rWrist + '.translate', force = True)
  776.        
  777.         cmds.connectAttr(lWrist + '.rotate', rotMDrWrist + '.input1', force = True)
  778.         cmds.connectAttr(rotMDrWrist + '.output', rWrist + '.rotate', force = True)
  779.        
  780.         cmds.connectAttr(lWrist + '.scale', scaleMDrWrist + '.input1', force = True)
  781.         cmds.connectAttr(scaleMDrWrist + '.output', rWrist + '.scale', force = True)
  782.        
  783.        
  784.         # indA
  785.        
  786.         tranMDrIndA = cmds.shadingNode('multiplyDivide', asUtility = True, n = rIndA + '_translate' + '_md')
  787.         rotMDrIndA = cmds.shadingNode('multiplyDivide', asUtility = True, n = rIndA + '_rotate' + '_md')
  788.         scaleMDrIndA = cmds.shadingNode('multiplyDivide', asUtility = True, n = rIndA + '_scale' + '_md')
  789.        
  790.         self.killM.append(tranMDrIndA)
  791.         self.killM.append(rotMDrIndA)
  792.         self.killM.append(scaleMDrIndA)
  793.        
  794.         cmds.setAttr(tranMDrIndA + '.input2X', -1)
  795.         cmds.setAttr(rotMDrIndA + '.input2Z', -1)
  796.         cmds.setAttr(rotMDrIndA + '.input2Y', -1)
  797.        
  798.         cmds.connectAttr(lIndA + '.translate', tranMDrIndA + '.input1', force = True)
  799.         cmds.connectAttr(tranMDrIndA + '.output', rIndA + '.translate', force = True)
  800.        
  801.         cmds.connectAttr(lIndA + '.rotate', rotMDrIndA + '.input1', force = True)
  802.         cmds.connectAttr(rotMDrIndA + '.output', rIndA + '.rotate', force = True)
  803.        
  804.         cmds.connectAttr(lIndA + '.scale', scaleMDrIndA + '.input1', force = True)
  805.         cmds.connectAttr(scaleMDrIndA + '.output', rIndA + '.scale', force = True)
  806.        
  807.        
  808.         # indB
  809.        
  810.         tranMDrIndB = cmds.shadingNode('multiplyDivide', asUtility = True, n = rIndB + '_translate' + '_md')
  811.         rotMDrIndB = cmds.shadingNode('multiplyDivide', asUtility = True, n = rIndB + '_rotate' + '_md')
  812.         scaleMDrIndB = cmds.shadingNode('multiplyDivide', asUtility = True, n = rIndB + '_scale' + '_md')
  813.        
  814.         self.killM.append(tranMDrIndB)
  815.         self.killM.append(rotMDrIndB)
  816.         self.killM.append(scaleMDrIndB)
  817.        
  818.         cmds.setAttr(tranMDrIndB + '.input2X', -1)
  819.         cmds.setAttr(rotMDrIndB + '.input2Z', -1)
  820.         cmds.setAttr(rotMDrIndB + '.input2Y', -1)
  821.        
  822.         cmds.connectAttr(lIndB + '.translate', tranMDrIndB + '.input1', force = True)
  823.         cmds.connectAttr(tranMDrIndB + '.output', rIndB + '.translate', force = True)
  824.        
  825.         cmds.connectAttr(lIndB + '.rotate', rotMDrIndB + '.input1', force = True)
  826.         cmds.connectAttr(rotMDrIndB + '.output', rIndB + '.rotate', force = True)
  827.        
  828.         cmds.connectAttr(lIndB + '.scale', scaleMDrIndB + '.input1', force = True)
  829.         cmds.connectAttr(scaleMDrIndB + '.output', rIndB + '.scale', force = True)
  830.        
  831.        
  832.        
  833.         # ind C
  834.        
  835.        
  836.         tranMDrIndC = cmds.shadingNode('multiplyDivide', asUtility = True, n = rIndC + '_translate' + '_md')
  837.         rotMDrIndC = cmds.shadingNode('multiplyDivide', asUtility = True, n = rIndC + '_rotate' + '_md')
  838.         scaleMDrIndC = cmds.shadingNode('multiplyDivide', asUtility = True, n = rIndC + '_scale' + '_md')
  839.        
  840.         self.killM.append(tranMDrIndC)
  841.         self.killM.append(rotMDrIndC)
  842.         self.killM.append(scaleMDrIndC)
  843.        
  844.         cmds.setAttr(tranMDrIndC + '.input2X', -1)
  845.         cmds.setAttr(rotMDrIndC + '.input2Z', -1)
  846.         cmds.setAttr(rotMDrIndC + '.input2Y', -1)
  847.        
  848.         cmds.connectAttr(lIndC + '.translate', tranMDrIndC + '.input1', force = True)
  849.         cmds.connectAttr(tranMDrIndC + '.output', rIndC + '.translate', force = True)
  850.        
  851.         cmds.connectAttr(lIndC + '.rotate', rotMDrIndC + '.input1', force = True)
  852.         cmds.connectAttr(rotMDrIndC + '.output', rIndC + '.rotate', force = True)
  853.        
  854.         cmds.connectAttr(lIndC + '.scale', scaleMDrIndC + '.input1', force = True)
  855.         cmds.connectAttr(scaleMDrIndC + '.output', rIndC + '.scale', force = True)
  856.        
  857.        
  858.         # ind D
  859.        
  860.         tranMDrIndD = cmds.shadingNode('multiplyDivide', asUtility = True, n = rIndD + '_translate' + '_md')
  861.         rotMDrIndD = cmds.shadingNode('multiplyDivide', asUtility = True, n = rIndD + '_rotate' + '_md')
  862.         scaleMDrIndD = cmds.shadingNode('multiplyDivide', asUtility = True, n = rIndD + '_scale' + '_md')
  863.        
  864.         self.killM.append(tranMDrIndD)
  865.         self.killM.append(rotMDrIndD)
  866.         self.killM.append(scaleMDrIndD)
  867.        
  868.         cmds.setAttr(tranMDrIndD + '.input2X', -1)
  869.         cmds.setAttr(rotMDrIndD + '.input2Z', -1)
  870.         cmds.setAttr(rotMDrIndD + '.input2Y', -1)
  871.        
  872.         cmds.connectAttr(lIndD + '.translate', tranMDrIndD + '.input1', force = True)
  873.         cmds.connectAttr(tranMDrIndD + '.output', rIndD + '.translate', force = True)
  874.        
  875.         cmds.connectAttr(lIndD + '.rotate', rotMDrIndD + '.input1', force = True)
  876.         cmds.connectAttr(rotMDrIndD + '.output', rIndD + '.rotate', force = True)
  877.        
  878.         cmds.connectAttr(lIndD + '.scale', scaleMDrIndD + '.input1', force = True)
  879.         cmds.connectAttr(scaleMDrIndD + '.output', rIndD + '.scale', force = True)
  880.        
  881.        
  882.         # mid A
  883.        
  884.         try:
  885.             tranMDrMidA = cmds.shadingNode('multiplyDivide', asUtility = True, n = rMidA + '_translate' + '_md')
  886.             rotMDrMidA = cmds.shadingNode('multiplyDivide', asUtility = True, n = rMidA + '_rotate' + '_md')
  887.             scaleMDrMidA = cmds.shadingNode('multiplyDivide', asUtility = True, n = rMidA + '_scale' + '_md')
  888.            
  889.             self.killM.append(tranMDrMidA)
  890.             self.killM.append(rotMDrMidA)
  891.             self.killM.append(scaleMDrMidA)
  892.            
  893.             cmds.setAttr(tranMDrMidA + '.input2X', -1)
  894.             cmds.setAttr(rotMDrMidA + '.input2Z', -1)
  895.             cmds.setAttr(rotMDrMidA + '.input2Y', -1)
  896.            
  897.             cmds.connectAttr(lMidA + '.translate', tranMDrMidA + '.input1', force = True)
  898.             cmds.connectAttr(tranMDrMidA + '.output', rMidA + '.translate', force = True)
  899.            
  900.             cmds.connectAttr(lMidA + '.rotate', rotMDrMidA + '.input1', force = True)
  901.             cmds.connectAttr(rotMDrMidA + '.output', rMidA + '.rotate', force = True)
  902.            
  903.             cmds.connectAttr(lMidA + '.scale', scaleMDrMidA + '.input1', force = True)
  904.             cmds.connectAttr(scaleMDrMidA + '.output', rMidA + '.scale', force = True)
  905.         except NameError:
  906.             pass
  907.        
  908.         # MidB
  909.         try:
  910.             tranMDrMidB = cmds.shadingNode('multiplyDivide', asUtility = True, n = rMidB + '_translate' + '_md')
  911.             rotMDrMidB = cmds.shadingNode('multiplyDivide', asUtility = True, n = rMidB + '_rotate' + '_md')
  912.             scaleMDrMidB = cmds.shadingNode('multiplyDivide', asUtility = True, n = rMidB + '_scale' + '_md')
  913.            
  914.             self.killM.append(tranMDrMidB)
  915.             self.killM.append(rotMDrMidB)
  916.             self.killM.append(scaleMDrMidB)
  917.            
  918.             cmds.setAttr(tranMDrMidB + '.input2X', -1)
  919.             cmds.setAttr(rotMDrMidB + '.input2Z', -1)
  920.             cmds.setAttr(rotMDrMidB + '.input2Y', -1)
  921.            
  922.             cmds.connectAttr(lMidB + '.translate', tranMDrMidB + '.input1', force = True)
  923.             cmds.connectAttr(tranMDrMidB + '.output', rMidB + '.translate', force = True)
  924.            
  925.             cmds.connectAttr(lMidB + '.rotate', rotMDrMidB + '.input1', force = True)
  926.             cmds.connectAttr(rotMDrMidB + '.output', rMidB + '.rotate', force = True)
  927.            
  928.             cmds.connectAttr(lMidB + '.scale', scaleMDrMidB + '.input1', force = True)
  929.             cmds.connectAttr(scaleMDrMidB + '.output', rMidB + '.scale', force = True)
  930.         except NameError:
  931.             pass
  932.            
  933.         # Mid C
  934.        
  935.         try:
  936.             tranMDrMidC = cmds.shadingNode('multiplyDivide', asUtility = True, n = rMidC + '_translate' + '_md')
  937.             rotMDrMidC = cmds.shadingNode('multiplyDivide', asUtility = True, n = rMidC + '_rotate' + '_md')
  938.             scaleMDrMidC = cmds.shadingNode('multiplyDivide', asUtility = True, n = rMidC + '_scale' + '_md')
  939.            
  940.             self.killM.append(tranMDrMidC)
  941.             self.killM.append(rotMDrMidC)
  942.             self.killM.append(scaleMDrMidC)
  943.            
  944.             cmds.setAttr(tranMDrMidC + '.input2X', -1)
  945.             cmds.setAttr(rotMDrMidC + '.input2Z', -1)
  946.             cmds.setAttr(rotMDrMidC + '.input2Y', -1)
  947.            
  948.             cmds.connectAttr(lMidC + '.translate', tranMDrMidC + '.input1', force = True)
  949.             cmds.connectAttr(tranMDrMidC + '.output', rMidC + '.translate', force = True)
  950.            
  951.             cmds.connectAttr(lMidC + '.rotate', rotMDrMidC + '.input1', force = True)
  952.             cmds.connectAttr(rotMDrMidC + '.output', rMidC + '.rotate', force = True)
  953.            
  954.             cmds.connectAttr(lMidC + '.scale', scaleMDrMidC + '.input1', force = True)
  955.             cmds.connectAttr(scaleMDrMidC + '.output', rMidC + '.scale', force = True)
  956.         except NameError:
  957.             pass
  958.        
  959.         # Mid D
  960.         try:
  961.             tranMDrMidD = cmds.shadingNode('multiplyDivide', asUtility = True, n = rMidD + '_translate' + '_md')
  962.             rotMDrMidD = cmds.shadingNode('multiplyDivide', asUtility = True, n = rMidD + '_rotate' + '_md')
  963.             scaleMDrMidD = cmds.shadingNode('multiplyDivide', asUtility = True, n = rMidD + '_scale' + '_md')
  964.            
  965.             self.killM.append(tranMDrMidD)
  966.             self.killM.append(rotMDrMidD)
  967.             self.killM.append(scaleMDrMidD)
  968.            
  969.             cmds.setAttr(tranMDrMidD + '.input2X', -1)
  970.             cmds.setAttr(rotMDrMidD + '.input2Z', -1)
  971.             cmds.setAttr(rotMDrMidD + '.input2Y', -1)
  972.            
  973.             cmds.connectAttr(lMidD + '.translate', tranMDrMidD + '.input1', force = True)
  974.             cmds.connectAttr(tranMDrMidD + '.output', rMidD + '.translate', force = True)
  975.            
  976.             cmds.connectAttr(lMidD + '.rotate', rotMDrMidD + '.input1', force = True)
  977.             cmds.connectAttr(rotMDrMidD + '.output', rMidD + '.rotate', force = True)
  978.            
  979.             cmds.connectAttr(lMidD + '.scale', scaleMDrMidD + '.input1', force = True)
  980.             cmds.connectAttr(scaleMDrMidD + '.output', rMidD + '.scale', force = True)
  981.         except NameError:
  982.             pass
  983.            
  984.         # ring A
  985.         try:
  986.             tranMDrRngA = cmds.shadingNode('multiplyDivide', asUtility = True, n = rRngA + '_translate' + '_md')
  987.             rotMDrRngA = cmds.shadingNode('multiplyDivide', asUtility = True, n = rRngA + '_rotate' + '_md')
  988.             scaleMDrRngA = cmds.shadingNode('multiplyDivide', asUtility = True, n = rRngA + '_scale' + '_md')
  989.            
  990.             self.killM.append(tranMDrRngA)
  991.             self.killM.append(rotMDrRngA)
  992.             self.killM.append(scaleMDrRngA)
  993.            
  994.             cmds.setAttr(tranMDrRngA + '.input2X', -1)
  995.             cmds.setAttr(rotMDrRngA + '.input2Z', -1)
  996.             cmds.setAttr(rotMDrRngA + '.input2Y', -1)
  997.            
  998.             cmds.connectAttr(lRngA + '.translate', tranMDrRngA + '.input1', force = True)
  999.             cmds.connectAttr(tranMDrRngA + '.output', rRngA + '.translate', force = True)
  1000.            
  1001.             cmds.connectAttr(lRngA + '.rotate', rotMDrRngA + '.input1', force = True)
  1002.             cmds.connectAttr(rotMDrRngA + '.output', rRngA + '.rotate', force = True)
  1003.            
  1004.             cmds.connectAttr(lRngA + '.scale', scaleMDrRngA + '.input1', force = True)
  1005.             cmds.connectAttr(scaleMDrRngA + '.output', rRngA + '.scale', force = True)
  1006.         except NameError:
  1007.             pass
  1008.        
  1009.         # RngB
  1010.         try:
  1011.             tranMDrRngB = cmds.shadingNode('multiplyDivide', asUtility = True, n = rRngB + '_translate' + '_md')
  1012.             rotMDrRngB = cmds.shadingNode('multiplyDivide', asUtility = True, n = rRngB + '_rotate' + '_md')
  1013.             scaleMDrRngB = cmds.shadingNode('multiplyDivide', asUtility = True, n = rRngB + '_scale' + '_md')
  1014.            
  1015.             self.killM.append(tranMDrRngB)
  1016.             self.killM.append(rotMDrRngB)
  1017.             self.killM.append(scaleMDrRngB)
  1018.            
  1019.             cmds.setAttr(tranMDrRngB + '.input2X', -1)
  1020.             cmds.setAttr(rotMDrRngB + '.input2Z', -1)
  1021.             cmds.setAttr(rotMDrRngB + '.input2Y', -1)
  1022.            
  1023.             cmds.connectAttr(lRngB + '.translate', tranMDrRngB + '.input1', force = True)
  1024.             cmds.connectAttr(tranMDrRngB + '.output', rRngB + '.translate', force = True)
  1025.            
  1026.             cmds.connectAttr(lRngB + '.rotate', rotMDrRngB + '.input1', force = True)
  1027.             cmds.connectAttr(rotMDrRngB + '.output', rRngB + '.rotate', force = True)
  1028.            
  1029.             cmds.connectAttr(lRngB + '.scale', scaleMDrRngB + '.input1', force = True)
  1030.             cmds.connectAttr(scaleMDrRngB + '.output', rRngB + '.scale', force = True)
  1031.         except NameError:
  1032.             pass
  1033.        
  1034.        
  1035.         # Rng C
  1036.        
  1037.         try:
  1038.             tranMDrRngC = cmds.shadingNode('multiplyDivide', asUtility = True, n = rRngC + '_translate' + '_md')
  1039.             rotMDrRngC = cmds.shadingNode('multiplyDivide', asUtility = True, n = rRngC + '_rotate' + '_md')
  1040.             scaleMDrRngC = cmds.shadingNode('multiplyDivide', asUtility = True, n = rRngC + '_scale' + '_md')
  1041.            
  1042.             self.killM.append(tranMDrRngC)
  1043.             self.killM.append(rotMDrRngC)
  1044.             self.killM.append(scaleMDrRngC)
  1045.            
  1046.             cmds.setAttr(tranMDrRngC + '.input2X', -1)
  1047.             cmds.setAttr(rotMDrRngC + '.input2Z', -1)
  1048.             cmds.setAttr(rotMDrRngC + '.input2Y', -1)
  1049.            
  1050.             cmds.connectAttr(lRngC + '.translate', tranMDrRngC + '.input1', force = True)
  1051.             cmds.connectAttr(tranMDrRngC + '.output', rRngC + '.translate', force = True)
  1052.            
  1053.             cmds.connectAttr(lRngC + '.rotate', rotMDrRngC + '.input1', force = True)
  1054.             cmds.connectAttr(rotMDrRngC + '.output', rRngC + '.rotate', force = True)
  1055.            
  1056.             cmds.connectAttr(lRngC + '.scale', scaleMDrRngC + '.input1', force = True)
  1057.             cmds.connectAttr(scaleMDrRngC + '.output', rRngC + '.scale', force = True)
  1058.         except NameError:
  1059.             pass
  1060.         # Rng D
  1061.         try:
  1062.             tranMDrRngD = cmds.shadingNode('multiplyDivide', asUtility = True, n = rRngD + '_translate' + '_md')
  1063.             rotMDrRngD = cmds.shadingNode('multiplyDivide', asUtility = True, n = rRngD + '_rotate' + '_md')
  1064.             scaleMDrRngD = cmds.shadingNode('multiplyDivide', asUtility = True, n = rRngD + '_scale' + '_md')
  1065.            
  1066.             self.killM.append(tranMDrRngD)
  1067.             self.killM.append(rotMDrRngD)
  1068.             self.killM.append(scaleMDrRngD)
  1069.            
  1070.             cmds.setAttr(tranMDrRngD + '.input2X', -1)
  1071.             cmds.setAttr(rotMDrRngD + '.input2Z', -1)
  1072.             cmds.setAttr(rotMDrRngD + '.input2Y', -1)
  1073.            
  1074.             cmds.connectAttr(lRngD + '.translate', tranMDrRngD + '.input1', force = True)
  1075.             cmds.connectAttr(tranMDrRngD + '.output', rRngD + '.translate', force = True)
  1076.            
  1077.             cmds.connectAttr(lRngD + '.rotate', rotMDrRngD + '.input1', force = True)
  1078.             cmds.connectAttr(rotMDrRngD + '.output', rRngD + '.rotate', force = True)
  1079.            
  1080.             cmds.connectAttr(lRngD + '.scale', scaleMDrRngD + '.input1', force = True)
  1081.             cmds.connectAttr(scaleMDrRngD + '.output', rRngD + '.scale', force = True)
  1082.         except NameError:
  1083.             pass
  1084.         # pinky A
  1085.         try:
  1086.             tranMDrPnkA = cmds.shadingNode('multiplyDivide', asUtility = True, n = rPnkA + '_translate' + '_md')
  1087.             rotMDrPnkA = cmds.shadingNode('multiplyDivide', asUtility = True, n = rPnkA + '_rotate' + '_md')
  1088.             scaleMDrPnkA = cmds.shadingNode('multiplyDivide', asUtility = True, n = rPnkA + '_scale' + '_md')
  1089.            
  1090.             self.killM.append(tranMDrPnkA)
  1091.             self.killM.append(rotMDrPnkA)
  1092.             self.killM.append(scaleMDrPnkA)
  1093.            
  1094.             cmds.setAttr(tranMDrPnkA + '.input2X', -1)
  1095.             cmds.setAttr(rotMDrPnkA + '.input2Z', -1)
  1096.             cmds.setAttr(rotMDrPnkA + '.input2Y', -1)
  1097.            
  1098.             cmds.connectAttr(lPnkA + '.translate', tranMDrPnkA + '.input1', force = True)
  1099.             cmds.connectAttr(tranMDrPnkA + '.output', rPnkA + '.translate', force = True)
  1100.            
  1101.             cmds.connectAttr(lPnkA + '.rotate', rotMDrPnkA + '.input1', force = True)
  1102.             cmds.connectAttr(rotMDrPnkA + '.output', rPnkA + '.rotate', force = True)
  1103.            
  1104.             cmds.connectAttr(lPnkA + '.scale', scaleMDrPnkA + '.input1', force = True)
  1105.             cmds.connectAttr(scaleMDrPnkA + '.output', rPnkA + '.scale', force = True)
  1106.         except NameError:
  1107.             pass
  1108.        
  1109.         # PnkB
  1110.         try:
  1111.             tranMDrPnkB = cmds.shadingNode('multiplyDivide', asUtility = True, n = rPnkB + '_translate' + '_md')
  1112.             rotMDrPnkB = cmds.shadingNode('multiplyDivide', asUtility = True, n = rPnkB + '_rotate' + '_md')
  1113.             scaleMDrPnkB = cmds.shadingNode('multiplyDivide', asUtility = True, n = rPnkB + '_scale' + '_md')
  1114.            
  1115.             self.killM.append(tranMDrPnkB)
  1116.             self.killM.append(rotMDrPnkB)
  1117.             self.killM.append(scaleMDrPnkB)
  1118.            
  1119.             cmds.setAttr(tranMDrPnkB + '.input2X', -1)
  1120.             cmds.setAttr(rotMDrPnkB + '.input2Z', -1)
  1121.             cmds.setAttr(rotMDrPnkB + '.input2Y', -1)
  1122.            
  1123.             cmds.connectAttr(lPnkB + '.translate', tranMDrPnkB + '.input1', force = True)
  1124.             cmds.connectAttr(tranMDrPnkB + '.output', rPnkB + '.translate', force = True)
  1125.            
  1126.             cmds.connectAttr(lPnkB + '.rotate', rotMDrPnkB + '.input1', force = True)
  1127.             cmds.connectAttr(rotMDrPnkB + '.output', rPnkB + '.rotate', force = True)
  1128.            
  1129.             cmds.connectAttr(lPnkB + '.scale', scaleMDrPnkB + '.input1', force = True)
  1130.             cmds.connectAttr(scaleMDrPnkB + '.output', rPnkB + '.scale', force = True)
  1131.         except NameError:
  1132.             pass
  1133.        
  1134.        
  1135.         # Pnk C
  1136.        
  1137.         try:
  1138.             tranMDrPnkC = cmds.shadingNode('multiplyDivide', asUtility = True, n = rPnkC + '_translate' + '_md')
  1139.             rotMDrPnkC = cmds.shadingNode('multiplyDivide', asUtility = True, n = rPnkC + '_rotate' + '_md')
  1140.             scaleMDrPnkC = cmds.shadingNode('multiplyDivide', asUtility = True, n = rPnkC + '_scale' + '_md')
  1141.            
  1142.             self.killM.append(tranMDrPnkC)
  1143.             self.killM.append(rotMDrPnkC)
  1144.             self.killM.append(scaleMDrPnkC)
  1145.            
  1146.             cmds.setAttr(tranMDrPnkC + '.input2X', -1)
  1147.             cmds.setAttr(rotMDrPnkC + '.input2Z', -1)
  1148.             cmds.setAttr(rotMDrPnkC + '.input2Y', -1)
  1149.            
  1150.             cmds.connectAttr(lPnkC + '.translate', tranMDrPnkC + '.input1', force = True)
  1151.             cmds.connectAttr(tranMDrPnkC + '.output', rPnkC + '.translate', force = True)
  1152.            
  1153.             cmds.connectAttr(lPnkC + '.rotate', rotMDrPnkC + '.input1', force = True)
  1154.             cmds.connectAttr(rotMDrPnkC + '.output', rPnkC + '.rotate', force = True)
  1155.            
  1156.             cmds.connectAttr(lPnkC + '.scale', scaleMDrPnkC + '.input1', force = True)
  1157.             cmds.connectAttr(scaleMDrPnkC + '.output', rPnkC + '.scale', force = True)
  1158.         except NameError:
  1159.             pass
  1160.        
  1161.         # Pnk D
  1162.         try:
  1163.             tranMDrPnkD = cmds.shadingNode('multiplyDivide', asUtility = True, n = rPnkD + '_translate' + '_md')
  1164.             rotMDrPnkD = cmds.shadingNode('multiplyDivide', asUtility = True, n = rPnkD + '_rotate' + '_md')
  1165.             scaleMDrPnkD = cmds.shadingNode('multiplyDivide', asUtility = True, n = rPnkD + '_scale' + '_md')
  1166.            
  1167.             self.killM.append(tranMDrPnkD)
  1168.             self.killM.append(rotMDrPnkD)
  1169.             self.killM.append(scaleMDrPnkD)
  1170.            
  1171.             cmds.setAttr(tranMDrPnkD + '.input2X', -1)
  1172.             cmds.setAttr(rotMDrPnkD + '.input2Z', -1)
  1173.             cmds.setAttr(rotMDrPnkD + '.input2Y', -1)
  1174.            
  1175.             cmds.connectAttr(lPnkD + '.translate', tranMDrPnkD + '.input1', force = True)
  1176.             cmds.connectAttr(tranMDrPnkD + '.output', rPnkD + '.translate', force = True)
  1177.            
  1178.             cmds.connectAttr(lPnkD + '.rotate', rotMDrPnkD + '.input1', force = True)
  1179.             cmds.connectAttr(rotMDrPnkD + '.output', rPnkD + '.rotate', force = True)
  1180.            
  1181.             cmds.connectAttr(lPnkD + '.scale', scaleMDrPnkD + '.input1', force = True)
  1182.             cmds.connectAttr(scaleMDrPnkD + '.output', rPnkD + '.scale', force = True)
  1183.         except NameError:
  1184.             pass
  1185.         # thumb A
  1186.         try:
  1187.             tranMDrThbA = cmds.shadingNode('multiplyDivide', asUtility = True, n = rThbA + '_translate' + '_md')
  1188.             rotMDrThbA = cmds.shadingNode('multiplyDivide', asUtility = True, n = rThbA + '_rotate' + '_md')
  1189.             scaleMDrThbA = cmds.shadingNode('multiplyDivide', asUtility = True, n = rThbA + '_scale' + '_md')
  1190.            
  1191.             self.killM.append(tranMDrThbA)
  1192.             self.killM.append(rotMDrThbA)
  1193.             self.killM.append(scaleMDrThbA)
  1194.            
  1195.             cmds.setAttr(tranMDrThbA + '.input2X', -1)
  1196.             cmds.setAttr(rotMDrThbA + '.input2Z', -1)
  1197.             cmds.setAttr(rotMDrThbA + '.input2Y', -1)
  1198.            
  1199.             cmds.connectAttr(lThbA + '.translate', tranMDrThbA + '.input1', force = True)
  1200.             cmds.connectAttr(tranMDrThbA + '.output', rThbA + '.translate', force = True)
  1201.            
  1202.             cmds.connectAttr(lThbA + '.rotate', rotMDrThbA + '.input1', force = True)
  1203.             cmds.connectAttr(rotMDrThbA + '.output', rThbA + '.rotate', force = True)
  1204.            
  1205.             cmds.connectAttr(lThbA + '.scale', scaleMDrThbA + '.input1', force = True)
  1206.             cmds.connectAttr(scaleMDrThbA + '.output', rThbA + '.scale', force = True)
  1207.         except NameError:
  1208.             pass
  1209.  
  1210.         # ThbB
  1211.        
  1212.         tranMDrThbB = cmds.shadingNode('multiplyDivide', asUtility = True, n = rThbB + '_translate' + '_md')
  1213.         rotMDrThbB = cmds.shadingNode('multiplyDivide', asUtility = True, n = rThbB + '_rotate' + '_md')
  1214.         scaleMDrThbB = cmds.shadingNode('multiplyDivide', asUtility = True, n = rThbB + '_scale' + '_md')
  1215.        
  1216.         self.killM.append(tranMDrThbB)
  1217.         self.killM.append(rotMDrThbB)
  1218.         self.killM.append(scaleMDrThbB)
  1219.        
  1220.         cmds.setAttr(tranMDrThbB + '.input2X', -1)
  1221.         cmds.setAttr(rotMDrThbB + '.input2Z', -1)
  1222.         cmds.setAttr(rotMDrThbB + '.input2Y', -1)
  1223.        
  1224.         cmds.connectAttr(lThbB + '.translate', tranMDrThbB + '.input1', force = True)
  1225.         cmds.connectAttr(tranMDrThbB + '.output', rThbB + '.translate', force = True)
  1226.        
  1227.         cmds.connectAttr(lThbB + '.rotate', rotMDrThbB + '.input1', force = True)
  1228.         cmds.connectAttr(rotMDrThbB + '.output', rThbB + '.rotate', force = True)
  1229.        
  1230.         cmds.connectAttr(lThbB + '.scale', scaleMDrThbB + '.input1', force = True)
  1231.         cmds.connectAttr(scaleMDrThbB + '.output', rThbB + '.scale', force = True)
  1232.        
  1233.        
  1234.        
  1235.         # Thb C
  1236.        
  1237.        
  1238.         tranMDrThbC = cmds.shadingNode('multiplyDivide', asUtility = True, n = rThbC + '_translate' + '_md')
  1239.         rotMDrThbC = cmds.shadingNode('multiplyDivide', asUtility = True, n = rThbC + '_rotate' + '_md')
  1240.         scaleMDrThbC = cmds.shadingNode('multiplyDivide', asUtility = True, n = rThbC + '_scale' + '_md')
  1241.        
  1242.         self.killM.append(tranMDrThbC)
  1243.         self.killM.append(rotMDrThbC)
  1244.         self.killM.append(scaleMDrThbC)
  1245.        
  1246.         cmds.setAttr(tranMDrThbC + '.input2X', -1)
  1247.         cmds.setAttr(rotMDrThbC + '.input2Z', -1)
  1248.         cmds.setAttr(rotMDrThbC + '.input2Y', -1)
  1249.        
  1250.         cmds.connectAttr(lThbC + '.translate', tranMDrThbC + '.input1', force = True)
  1251.         cmds.connectAttr(tranMDrThbC + '.output', rThbC + '.translate', force = True)
  1252.        
  1253.         cmds.connectAttr(lThbC + '.rotate', rotMDrThbC + '.input1', force = True)
  1254.         cmds.connectAttr(rotMDrThbC + '.output', rThbC + '.rotate', force = True)
  1255.        
  1256.         cmds.connectAttr(lThbC + '.scale', scaleMDrThbC + '.input1', force = True)
  1257.         cmds.connectAttr(scaleMDrThbC + '.output', rThbC + '.scale', force = True)
  1258.        
  1259.        
  1260.         # Thb D
  1261.        
  1262.         tranMDrThbD = cmds.shadingNode('multiplyDivide', asUtility = True, n = rThbD + '_translate' + '_md')
  1263.         rotMDrThbD = cmds.shadingNode('multiplyDivide', asUtility = True, n = rThbD + '_rotate' + '_md')
  1264.         scaleMDrThbD = cmds.shadingNode('multiplyDivide', asUtility = True, n = rThbD + '_scale' + '_md')
  1265.        
  1266.         self.killM.append(tranMDrThbD)
  1267.         self.killM.append(rotMDrThbD)
  1268.         self.killM.append(scaleMDrThbD)
  1269.        
  1270.         cmds.setAttr(tranMDrThbD + '.input2X', -1)
  1271.         cmds.setAttr(rotMDrThbD + '.input2Z', -1)
  1272.         cmds.setAttr(rotMDrThbD + '.input2Y', -1)
  1273.        
  1274.         cmds.connectAttr(lThbD + '.translate', tranMDrThbD + '.input1', force = True)
  1275.         cmds.connectAttr(tranMDrThbD + '.output', rThbD + '.translate', force = True)
  1276.        
  1277.         cmds.connectAttr(lThbD + '.rotate', rotMDrThbD + '.input1', force = True)
  1278.         cmds.connectAttr(rotMDrThbD + '.output', rThbD + '.rotate', force = True)
  1279.        
  1280.         cmds.connectAttr(lThbD + '.scale', scaleMDrThbD + '.input1', force = True)
  1281.         cmds.connectAttr(scaleMDrThbD + '.output', rThbD + '.scale', force = True)
  1282.        
  1283.        
  1284.         # hip
  1285.        
  1286.        
  1287.         tranMDrHip = cmds.shadingNode('multiplyDivide', asUtility = True, n = rHip + '_translate' + '_md')
  1288.         rotMDrHip = cmds.shadingNode('multiplyDivide', asUtility = True, n = rHip + '_rotate' + '_md')
  1289.         scaleMDrHip = cmds.shadingNode('multiplyDivide', asUtility = True, n = rHip + '_scale' + '_md')
  1290.        
  1291.         self.killM.append(tranMDrHip)
  1292.         self.killM.append(rotMDrHip)
  1293.         self.killM.append(scaleMDrHip)
  1294.        
  1295.         cmds.setAttr(tranMDrHip + '.input2X', -1)
  1296.         cmds.setAttr(rotMDrHip + '.input2Z', -1)
  1297.         cmds.setAttr(rotMDrHip + '.input2Y', -1)
  1298.        
  1299.         cmds.connectAttr(lHip + '.translate', tranMDrHip + '.input1', force = True)
  1300.         cmds.connectAttr(tranMDrHip + '.output', rHip + '.translate', force = True)
  1301.        
  1302.         cmds.connectAttr(lHip + '.rotate', rotMDrHip + '.input1', force = True)
  1303.         cmds.connectAttr(rotMDrHip + '.output', rHip + '.rotate', force = True)
  1304.        
  1305.         cmds.connectAttr(lHip + '.scale', scaleMDrHip + '.input1', force = True)
  1306.         cmds.connectAttr(scaleMDrHip + '.output', rHip + '.scale', force = True)
  1307.        
  1308.        
  1309.         # knee
  1310.        
  1311.         tranMDrKnee = cmds.shadingNode('multiplyDivide', asUtility = True, n = rKnee + '_translate' + '_md')
  1312.         rotMDrKnee = cmds.shadingNode('multiplyDivide', asUtility = True, n = rKnee + '_rotate' + '_md')
  1313.         scaleMDrKnee = cmds.shadingNode('multiplyDivide', asUtility = True, n = rKnee + '_scale' + '_md')
  1314.  
  1315.         self.killM.append(tranMDrKnee)
  1316.         self.killM.append(rotMDrKnee)
  1317.         self.killM.append(scaleMDrKnee)
  1318.  
  1319.         cmds.setAttr(tranMDrKnee + '.input2X', -1)
  1320.         cmds.setAttr(rotMDrKnee + '.input2Z', -1)
  1321.         cmds.setAttr(rotMDrKnee + '.input2Y', -1)
  1322.        
  1323.         cmds.connectAttr(lKnee + '.translate', tranMDrKnee + '.input1', force = True)
  1324.         cmds.connectAttr(tranMDrKnee + '.output', rKnee + '.translate', force = True)
  1325.        
  1326.         cmds.connectAttr(lKnee + '.rotate', rotMDrKnee + '.input1', force = True)
  1327.         cmds.connectAttr(rotMDrKnee + '.output', rKnee + '.rotate', force = True)
  1328.        
  1329.         cmds.connectAttr(lKnee + '.scale', scaleMDrKnee + '.input1', force = True)
  1330.         cmds.connectAttr(scaleMDrKnee + '.output', rKnee + '.scale', force = True)
  1331.        
  1332.        
  1333.        
  1334.        
  1335.         # ankle
  1336.        
  1337.        
  1338.         tranMDrAnkle = cmds.shadingNode('multiplyDivide', asUtility = True, n = rAnkle + '_translate' + '_md')
  1339.         rotMDrAnkle = cmds.shadingNode('multiplyDivide', asUtility = True, n = rAnkle + '_rotate' + '_md')
  1340.         scaleMDrAnkle = cmds.shadingNode('multiplyDivide', asUtility = True, n = rAnkle + '_scale' + '_md')
  1341.  
  1342.         self.killM.append(tranMDrAnkle)
  1343.         self.killM.append(rotMDrAnkle)
  1344.         self.killM.append(scaleMDrAnkle)
  1345.        
  1346.         cmds.setAttr(tranMDrAnkle + '.input2X', -1)
  1347.         cmds.setAttr(rotMDrAnkle + '.input2Z', -1)
  1348.         cmds.setAttr(rotMDrAnkle + '.input2Y', -1)
  1349.        
  1350.         cmds.connectAttr(lAnkle + '.translate', tranMDrAnkle + '.input1', force = True)
  1351.         cmds.connectAttr(tranMDrAnkle + '.output', rAnkle + '.translate', force = True)
  1352.        
  1353.         cmds.connectAttr(lAnkle + '.rotate', rotMDrAnkle + '.input1', force = True)
  1354.         cmds.connectAttr(rotMDrAnkle + '.output', rAnkle + '.rotate', force = True)
  1355.        
  1356.         cmds.connectAttr(lAnkle + '.scale', scaleMDrAnkle + '.input1', force = True)
  1357.         cmds.connectAttr(scaleMDrAnkle + '.output', rAnkle + '.scale', force = True)
  1358.        
  1359.        
  1360.        
  1361.         # ball
  1362.        
  1363.        
  1364.        
  1365.         tranMDrBall = cmds.shadingNode('multiplyDivide', asUtility = True, n = rBall + '_translate' + '_md')
  1366.         rotMDrBall = cmds.shadingNode('multiplyDivide', asUtility = True, n = rBall + '_rotate' + '_md')
  1367.         scaleMDrBall = cmds.shadingNode('multiplyDivide', asUtility = True, n = rBall + '_scale' + '_md')
  1368.        
  1369.         self.killM.append(tranMDrBall)
  1370.         self.killM.append(rotMDrBall)
  1371.         self.killM.append(scaleMDrBall)
  1372.        
  1373.         cmds.setAttr(tranMDrBall + '.input2X', -1)
  1374.         cmds.setAttr(rotMDrBall + '.input2Z', -1)
  1375.         cmds.setAttr(rotMDrBall + '.input2Y', -1)
  1376.        
  1377.         cmds.connectAttr(lBall + '.translate', tranMDrBall + '.input1', force = True)
  1378.         cmds.connectAttr(tranMDrBall + '.output', rBall + '.translate', force = True)
  1379.        
  1380.         cmds.connectAttr(lBall + '.rotate', rotMDrBall + '.input1', force = True)
  1381.         cmds.connectAttr(rotMDrBall + '.output', rBall + '.rotate', force = True)
  1382.        
  1383.         cmds.connectAttr(lBall + '.scale', scaleMDrBall + '.input1', force = True)
  1384.         cmds.connectAttr(scaleMDrBall + '.output', rBall + '.scale', force = True)
  1385.        
  1386.        
  1387.        
  1388.         # toe
  1389.        
  1390.        
  1391.        
  1392.         tranMDrToe = cmds.shadingNode('multiplyDivide', asUtility = True, n = rToe + '_translate' + '_md')
  1393.         rotMDrToe = cmds.shadingNode('multiplyDivide', asUtility = True, n = rToe + '_rotate' + '_md')
  1394.         scaleMDrToe = cmds.shadingNode('multiplyDivide', asUtility = True, n = rToe + '_scale' + '_md')
  1395.        
  1396.         self.killM.append(tranMDrToe)
  1397.         self.killM.append(rotMDrToe)
  1398.         self.killM.append(scaleMDrToe)
  1399.        
  1400.         cmds.setAttr(tranMDrToe + '.input2X', -1)
  1401.         cmds.setAttr(rotMDrToe + '.input2Z', -1)
  1402.         cmds.setAttr(rotMDrToe + '.input2Y', -1)
  1403.        
  1404.         cmds.connectAttr(lToe + '.translate', tranMDrToe + '.input1', force = True)
  1405.         cmds.connectAttr(tranMDrToe + '.output', rToe + '.translate', force = True)
  1406.        
  1407.         cmds.connectAttr(lToe + '.rotate', rotMDrToe + '.input1', force = True)
  1408.         cmds.connectAttr(rotMDrToe + '.output', rToe + '.rotate', force = True)
  1409.        
  1410.         cmds.connectAttr(lToe + '.scale', scaleMDrToe + '.input1', force = True)
  1411.         cmds.connectAttr(scaleMDrToe + '.output', rToe + '.scale', force = True)
  1412.        
  1413.        
  1414.        
  1415.         # heel
  1416.        
  1417.        
  1418.        
  1419.         tranMDrHeel = cmds.shadingNode('multiplyDivide', asUtility = True, n = rHeel + '_translate' + '_md')
  1420.         rotMDrHeel = cmds.shadingNode('multiplyDivide', asUtility = True, n = rHeel + '_rotate' + '_md')
  1421.         scaleMDrHeel = cmds.shadingNode('multiplyDivide', asUtility = True, n = rHeel + '_scale' + '_md')
  1422.        
  1423.         self.killM.append(tranMDrHeel)
  1424.         self.killM.append(rotMDrHeel)
  1425.         self.killM.append(scaleMDrHeel)
  1426.        
  1427.         cmds.setAttr(tranMDrHeel + '.input2X', -1)
  1428.         cmds.setAttr(rotMDrHeel + '.input2Z', -1)
  1429.         cmds.setAttr(rotMDrHeel + '.input2Y', -1)
  1430.        
  1431.         cmds.connectAttr(lHeel + '.translate', tranMDrHeel + '.input1', force = True)
  1432.         cmds.connectAttr(tranMDrHeel + '.output', rHeel + '.translate', force = True)
  1433.        
  1434.         cmds.connectAttr(lHeel + '.rotate', rotMDrHeel + '.input1', force = True)
  1435.         cmds.connectAttr(rotMDrHeel + '.output', rHeel + '.rotate', force = True)
  1436.        
  1437.         cmds.connectAttr(lHeel + '.scale', scaleMDrHeel + '.input1', force = True)
  1438.         cmds.connectAttr(scaleMDrHeel + '.output', rHeel + '.scale', force = True)
  1439.        
  1440.         ### STORING MULTIPLY DIVIDES ###
  1441.         try:
  1442.             tempMDGrp = [tranMDrClav, rotMDrClav, scaleMDrClav,
  1443.                 tranMDrShldr, rotMDrShldr, scaleMDrShldr,
  1444.                 tranMDrElbow, rotMDrElbow, scaleMDrElbow,
  1445.                 tranMDrWrist, rotMDrWrist, scaleMDrWrist,
  1446.                 tranMDrIndA, rotMDrIndA, scaleMDrIndA,
  1447.                 tranMDrIndB, rotMDrIndB, scaleMDrIndB,
  1448.                 tranMDrIndC, rotMDrIndC, scaleMDrIndC,
  1449.                 tranMDrIndD, rotMDrIndD, scaleMDrIndD,
  1450.                 tranMDrMidA, rotMDrMidA, scaleMDrMidA,
  1451.                 tranMDrMidB, rotMDrMidB, scaleMDrMidB,
  1452.                 tranMDrMidC, rotMDrMidC, scaleMDrMidC,
  1453.                 tranMDrMidD, rotMDrMidD, scaleMDrMidD,
  1454.                 tranMDrRngA, rotMDrRngA, scaleMDrRngA,
  1455.                 tranMDrRngB, rotMDrRngB, scaleMDrRngB,
  1456.                 tranMDrRngC, rotMDrRngC, scaleMDrRngC,
  1457.                 tranMDrRngD, rotMDrRngD, scaleMDrRngD,
  1458.                 tranMDrPnkA, rotMDrPnkA, scaleMDrPnkA,
  1459.                 tranMDrPnkB, rotMDrPnkB, scaleMDrPnkB,
  1460.                 tranMDrPnkC, rotMDrPnkC, scaleMDrPnkC,
  1461.                 tranMDrPnkD, rotMDrPnkD, scaleMDrPnkD,
  1462.                 tranMDrThbA, rotMDrThbA, scaleMDrThbA,
  1463.                 tranMDrThbB, rotMDrThbB, scaleMDrThbB,
  1464.                 tranMDrThbC, rotMDrThbC, scaleMDrThbC,
  1465.                 tranMDrThbD, rotMDrThbD, scaleMDrThbD,
  1466.                 tranMDrHip, rotMDrHip, scaleMDrHip,
  1467.                 tranMDrKnee, rotMDrKnee, scaleMDrKnee,
  1468.                 tranMDrAnkle, rotMDrAnkle, scaleMDrAnkle,
  1469.                 tranMDrBall, rotMDrBall, scaleMDrBall,
  1470.                 tranMDrToe, rotMDrToe, scaleMDrToe,
  1471.                 tranMDrHeel, rotMDrHeel, scaleMDrHeel]
  1472.         except NameError:
  1473.             pass
  1474.        
  1475.         ### CREATE CURVES ###
  1476.        
  1477.  
  1478.         crCrv(chest, lClav)
  1479.  
  1480.         crCrv(lClav, lShldr)
  1481.            
  1482.         crCrv(lShldr, lElbow)
  1483.  
  1484.         crCrv(lElbow, lWrist)
  1485.  
  1486.         crCrv(lWrist, lIndA)
  1487.         try:
  1488.             crCrv(lWrist, lMidA)
  1489.         except NameError:
  1490.             pass
  1491.         try:
  1492.             crCrv(lWrist, lRngA)
  1493.         except NameError:
  1494.             pass
  1495.         try:
  1496.             crCrv(lWrist, lPnkA)
  1497.         except NameError:
  1498.             pass
  1499.         crCrv(lIndB, lIndA)
  1500.  
  1501.         crCrv(lIndC, lIndB)
  1502.  
  1503.         crCrv(lIndD, lIndC)
  1504.         try:
  1505.             crCrv(lMidB, lMidA)
  1506.         except NameError:
  1507.             pass
  1508.         try:
  1509.             crCrv(lMidC, lMidB)
  1510.         except NameError:
  1511.             pass
  1512.         try:
  1513.             crCrv(lMidD, lMidC)
  1514.         except NameError:
  1515.             pass
  1516.         try:
  1517.             crCrv(lRngB, lRngA)
  1518.         except NameError:
  1519.             pass
  1520.         try:
  1521.             crCrv(lRngC, lRngB)
  1522.         except NameError:
  1523.             pass
  1524.         try:
  1525.             crCrv(lRngD, lRngC)
  1526.         except NameError:
  1527.             pass
  1528.         try:
  1529.             crCrv(lPnkB, lPnkA)
  1530.         except NameError:
  1531.             pass
  1532.         try:
  1533.             crCrv(lPnkC, lPnkB)
  1534.         except NameError:
  1535.             pass
  1536.         try:
  1537.             crCrv(lPnkD, lPnkC)
  1538.         except NameError:
  1539.             pass
  1540.            
  1541.         crCrv(hips, lHip)
  1542.         crCrv(lHip, lKnee)
  1543.         crCrv(lKnee, lAnkle)
  1544.         crCrv(lAnkle, lBall)
  1545.         crCrv(lToe, lBall)
  1546.         crCrv(lToe, lHeel)
  1547.         crCrv(lHeel, lAnkle)
  1548.        
  1549.         crCrv(lWrist, lThbA)
  1550.         crCrv(lThbA, lThbB)
  1551.         crCrv(lThbB, lThbC)
  1552.         crCrv(lThbC, lThbD)
  1553.  
  1554.         cmds.select(clear = True)
  1555.        
  1556.         tempSideCurvesInst = cmds.instance(tempSideCurves, n = 'inst_' + tempSideCurves)
  1557.         cmds.scale(-1,1,1, tempSideCurvesInst)
  1558.        
  1559.        
  1560.         cmds.setAttr(hips + '.translateX', lock = True, channelBox = False, keyable = False)
  1561.         cmds.setAttr(chest + '.translateX', lock = True, channelBox = False, keyable = False)
  1562.         cmds.setAttr(hips + '.rotateY', lock = True, channelBox = False, keyable = False)
  1563.         cmds.setAttr(chest + '.rotateY', lock = True, channelBox = False, keyable = False)
  1564.         cmds.setAttr(hips + '.rotateX', lock = True, channelBox = False, keyable = False)
  1565.         cmds.setAttr(chest + '.rotateX', lock = True, channelBox = False, keyable = False)
  1566.         cmds.setAttr(hips + '.rotateZ', lock = True, channelBox = False, keyable = False)
  1567.         cmds.setAttr(chest + '.rotateZ', lock = True, channelBox = False, keyable = False)
  1568.        
  1569.         cmds.setAttr(tempSideCurvesInst[0] + '.template', 1)
  1570.         cmds.setAttr(tempSideCurves + '.template', 1)
  1571.        
  1572.        
  1573.        
  1574.         # create movers
  1575.        
  1576.         neckMov = cmds.circle(c = (0,23,0), r = 1, n = 'neckMovCtrl', d = 1, s = 4, ch = False)[0]
  1577.         spineMov = cmds.circle(c = (0,10,0), r = 1, n = 'spineMovCtrl', d = 1, s = 4, ch = False)[0]
  1578.        
  1579.         neckMovShape = cmds.listRelatives(neckMov, shapes = True)[0]
  1580.         cmds.setAttr(neckMovShape + '.overrideEnabled', 1)
  1581.         cmds.setAttr(neckMovShape + '.overrideColor', 20)
  1582.        
  1583.         spineMovShape = cmds.listRelatives(spineMov, shapes = True)[0]
  1584.         cmds.setAttr(spineMovShape + '.overrideEnabled', 1)
  1585.         cmds.setAttr(spineMovShape + '.overrideColor', 20)
  1586.        
  1587.        
  1588.         cmds.xform(spineMov, cp = True)
  1589.         cmds.xform(neckMov, cp = True)
  1590.        
  1591.         # reparenting
  1592.        
  1593.         cmds.parent(spineMov, hips)
  1594.         cmds.parent(neckMov, spineMov)
  1595.         cmds.parent(chest, spineMov)
  1596.         cmds.parent(lShldr, rShldr, lClav, rClav, hips)
  1597.        
  1598.        
  1599.        
  1600.         cmds.setAttr(neckMov + '.rotateY', keyable = False, lock = True, channelBox = False)
  1601.         cmds.setAttr(neckMov + '.rotateZ', keyable = False, lock = True, channelBox = False)
  1602.         cmds.setAttr(neckMov + '.translateX', keyable = False, lock = True, channelBox = False)
  1603.         cmds.setAttr(neckMov + '.translateY', keyable = False, lock = True, channelBox = False)
  1604.         cmds.setAttr(neckMov + '.translateZ', keyable = False, lock = True, channelBox = False)
  1605.         cmds.setAttr(neckMov + '.scaleX', keyable = False, lock = True, channelBox = False)
  1606.         cmds.setAttr(neckMov + '.scaleY', keyable = False, lock = True, channelBox = False)
  1607.         cmds.setAttr(neckMov + '.scaleZ', keyable = False, lock = True, channelBox = False)
  1608.         cmds.setAttr(neckMov + '.visibility', keyable = False, lock = True, channelBox = False)
  1609.        
  1610.         cmds.setAttr(spineMov + '.rotateY', keyable = False, lock = True, channelBox = False)
  1611.         cmds.setAttr(spineMov + '.rotateZ', keyable = False, lock = True, channelBox = False)
  1612.         cmds.setAttr(spineMov + '.translateX', keyable = False, lock = True, channelBox = False)
  1613.         cmds.setAttr(spineMov + '.translateY', keyable = False, lock = True, channelBox = False)
  1614.         cmds.setAttr(spineMov + '.translateZ', keyable = False, lock = True, channelBox = False)
  1615.         cmds.setAttr(spineMov + '.scaleX', keyable = False, lock = True, channelBox = False)
  1616.         cmds.setAttr(spineMov + '.scaleY', keyable = False, lock = True, channelBox = False)
  1617.         cmds.setAttr(spineMov + '.scaleZ', keyable = False, lock = True, channelBox = False)
  1618.         cmds.setAttr(spineMov + '.visibility', keyable = False, lock = True, channelBox = False)
  1619.        
  1620.        
  1621.         ### CREATE SPINE self.locators ###
  1622.         nSide = ''
  1623.         spineLocs = {}
  1624.         self.locators['spineLocs'] = spineLocs
  1625.        
  1626.        
  1627.        
  1628.         def crSpineA():
  1629.        
  1630.             spineA = crLocs((0,13.25,0), 'spineA')
  1631.             spineLocs['spineA'] = spineA
  1632.             spineB = crLocs((0,16.5,0), 'spineB')
  1633.             spineLocs['spineB'] = spineB
  1634.             spineC = crLocs((0,19.75,0), 'spineC')
  1635.             spineLocs['spineC'] = spineC
  1636.            
  1637.             for p in spineLocs.iterkeys():
  1638.                 cmds.parent(spineLocs[p], spineMov)
  1639.            
  1640.            
  1641.            
  1642.             for sc in spineLocs.iterkeys():
  1643.                 cmds.setAttr(spineLocs[sc] + '.scaleX', lock = True, keyable = False)
  1644.                 cmds.setAttr(spineLocs[sc] + '.scaleY', lock = True, keyable = False)
  1645.                 cmds.setAttr(spineLocs[sc] + '.scaleZ', lock = True, keyable = False)
  1646.                 cmds.setAttr(spineLocs[sc] + '.visibility', lock = True, keyable = False)
  1647.            
  1648.             for sc in spineLocs.iterkeys():
  1649.                 cmds.setAttr(spineLocs[sc] + '.translateX', lock = True, keyable = False, channelBox = False)
  1650.            
  1651.            
  1652.             for loc in spineLocs.iterkeys():
  1653.                 locShapes = cmds.listRelatives(spineLocs[loc], shapes = True)[0]
  1654.                 cmds.setAttr(locShapes + '.overrideEnabled', 1)
  1655.                 cmds.setAttr(locShapes + '.overrideColor', 15)
  1656.                 cmds.setAttr(locShapes + '.localPositionX', lock = True, keyable = False, channelBox = False)
  1657.                 cmds.setAttr(locShapes + '.localPositionY', lock = True, keyable = False, channelBox = False)
  1658.                 cmds.setAttr(locShapes + '.localPositionZ', lock = True, keyable = False, channelBox = False)
  1659.                 cmds.setAttr(locShapes + '.localScaleX', .25, lock = True, keyable = False, channelBox = False)
  1660.                 cmds.setAttr(locShapes + '.localScaleY', .25, lock = True, keyable = False, channelBox = False)
  1661.                 cmds.setAttr(locShapes + '.localScaleZ', .25, lock = True, keyable = False, channelBox = False)
  1662.        
  1663.             crCrv(hips, spineA)
  1664.             crCrv(spineA, spineB)
  1665.             crCrv(spineB, spineC)
  1666.             crCrv(spineC, chest)
  1667.        
  1668.         def crSpineB():
  1669.        
  1670.             spineA = crLocs((0,12.16666666667,0), 'spineA')
  1671.             spineLocs['spineA'] = spineA
  1672.             spineB = crLocs((0,14.33333333334,0), 'spineB')
  1673.             spineLocs['spineB'] = spineB
  1674.             spineC = crLocs((0,16.50000000001,0), 'spineC')
  1675.             spineLocs['spineC'] = spineC
  1676.             spineD = crLocs((0,18.66666666668,0), 'spineD')
  1677.             spineLocs['spineD'] = spineD
  1678.             spineE = crLocs((0,20.83333333335,0), 'spineE')
  1679.             spineLocs['spineE'] = spineE
  1680.            
  1681.             for p in spineLocs.iterkeys():
  1682.                 cmds.parent(spineLocs[p], spineMov)
  1683.            
  1684.            
  1685.            
  1686.             for sc in spineLocs.iterkeys():
  1687.                 cmds.setAttr(spineLocs[sc] + '.scaleX', lock = True, keyable = False)
  1688.                 cmds.setAttr(spineLocs[sc] + '.scaleY', lock = True, keyable = False)
  1689.                 cmds.setAttr(spineLocs[sc] + '.scaleZ', lock = True, keyable = False)
  1690.                 cmds.setAttr(spineLocs[sc] + '.visibility', lock = True, keyable = False)
  1691.            
  1692.             for sc in spineLocs.iterkeys():
  1693.                 cmds.setAttr(spineLocs[sc] + '.translateX', lock = True, keyable = False, channelBox = False)
  1694.            
  1695.            
  1696.             for loc in spineLocs.iterkeys():
  1697.                 locShapes = cmds.listRelatives(spineLocs[loc], shapes = True)[0]
  1698.                 cmds.setAttr(locShapes + '.overrideEnabled', 1)
  1699.                 cmds.setAttr(locShapes + '.overrideColor', 15)
  1700.                 cmds.setAttr(locShapes + '.localPositionX', lock = True, keyable = False, channelBox = False)
  1701.                 cmds.setAttr(locShapes + '.localPositionY', lock = True, keyable = False, channelBox = False)
  1702.                 cmds.setAttr(locShapes + '.localPositionZ', lock = True, keyable = False, channelBox = False)
  1703.                 cmds.setAttr(locShapes + '.localScaleX', .25, lock = True, keyable = False, channelBox = False)
  1704.                 cmds.setAttr(locShapes + '.localScaleY', .25, lock = True, keyable = False, channelBox = False)
  1705.                 cmds.setAttr(locShapes + '.localScaleZ', .25, lock = True, keyable = False, channelBox = False)
  1706.        
  1707.             crCrv(hips, spineA)
  1708.             crCrv(spineA, spineB)
  1709.             crCrv(spineB, spineC)
  1710.             crCrv(spineC, spineD)
  1711.             crCrv(spineD, spineE)
  1712.             crCrv(spineE, chest)
  1713.        
  1714.        
  1715.            
  1716.            
  1717.        
  1718.         def crSpineC():
  1719.            
  1720.             spineA = crLocs((0,11.18181818181818,0), 'spineA')
  1721.             spineLocs['spineA'] = spineA
  1722.             spineB = crLocs((0,12.36363636363636,0), 'spineB')
  1723.             spineLocs['spineB'] = spineB
  1724.             spineC = crLocs((0,13.54545454545454,0), 'spineC')
  1725.             spineLocs['spineC'] = spineC
  1726.             spineD = crLocs((0,14.72727272727272,0), 'spineD')
  1727.             spineLocs['spineD'] = spineD
  1728.             spineE = crLocs((0,15.90909090909091,0), 'spineE')
  1729.             spineLocs['spineE'] = spineE
  1730.             spineF = crLocs((0,17.09090909090909,0), 'spineF')
  1731.             spineLocs['spineF'] = spineF
  1732.             spineG = crLocs((0,18.27272727272727,0), 'spineG')
  1733.             spineLocs['spineG'] = spineG
  1734.             spineH = crLocs((0,19.45454545454545,0), 'spineH')
  1735.             spineLocs['spineH'] = spineH
  1736.             spineI = crLocs((0,20.63636363636363,0), 'spineI')
  1737.             spineLocs['spineI'] = spineI
  1738.             spineJ = crLocs((0,21.81818181818181,0), 'spineJ')
  1739.             spineLocs['spineJ'] = spineJ
  1740.            
  1741.             for p in spineLocs.iterkeys():
  1742.                 cmds.parent(spineLocs[p], spineMov)
  1743.            
  1744.            
  1745.            
  1746.             for sc in spineLocs.iterkeys():
  1747.                 cmds.setAttr(spineLocs[sc] + '.scaleX', lock = True, keyable = False)
  1748.                 cmds.setAttr(spineLocs[sc] + '.scaleY', lock = True, keyable = False)
  1749.                 cmds.setAttr(spineLocs[sc] + '.scaleZ', lock = True, keyable = False)
  1750.                 cmds.setAttr(spineLocs[sc] + '.visibility', lock = True, keyable = False)
  1751.            
  1752.             for sc in spineLocs.iterkeys():
  1753.                 cmds.setAttr(spineLocs[sc] + '.translateX', lock = True, keyable = False, channelBox = False)
  1754.            
  1755.            
  1756.             for loc in spineLocs.iterkeys():
  1757.                 locShapes = cmds.listRelatives(spineLocs[loc], shapes = True)[0]
  1758.                 cmds.setAttr(locShapes + '.overrideEnabled', 1)
  1759.                 cmds.setAttr(locShapes + '.overrideColor', 15)
  1760.                 cmds.setAttr(locShapes + '.localPositionX', lock = True, keyable = False, channelBox = False)
  1761.                 cmds.setAttr(locShapes + '.localPositionY', lock = True, keyable = False, channelBox = False)
  1762.                 cmds.setAttr(locShapes + '.localPositionZ', lock = True, keyable = False, channelBox = False)
  1763.                 cmds.setAttr(locShapes + '.localScaleX', .25, lock = True, keyable = False, channelBox = False)
  1764.                 cmds.setAttr(locShapes + '.localScaleY', .25, lock = True, keyable = False, channelBox = False)
  1765.                 cmds.setAttr(locShapes + '.localScaleZ', .25, lock = True, keyable = False, channelBox = False)
  1766.            
  1767.             crCrv(hips, spineA)
  1768.             crCrv(spineA, spineB)
  1769.             crCrv(spineB, spineC)
  1770.             crCrv(spineC, spineD)
  1771.             crCrv(spineD, spineE)
  1772.             crCrv(spineE, spineF)
  1773.             crCrv(spineF, spineG)
  1774.             crCrv(spineG, spineH)
  1775.             crCrv(spineH, spineI)
  1776.             crCrv(spineI, spineJ)
  1777.             crCrv(spineJ, chest)
  1778.        
  1779.        
  1780.         ### NECK DUMMY ###
  1781.        
  1782.         neckLocs = {}
  1783.         headLocs = {}
  1784.         self.locators['neckLocs'] = neckLocs
  1785.         self.locators['headLocs'] = headLocs
  1786.        
  1787.         def crNeckA():
  1788.        
  1789.             neckA = crLocs((0,24.66666666666667,0), 'neckA')
  1790.             neckLocs['neckA'] = neckA
  1791.             neckB = crLocs((0,26.33333333333333,0), 'neckB')
  1792.             neckLocs['neckB'] = neckB
  1793.             head = crLocs((0,28,0), 'head')
  1794.             headLocs['head'] = head
  1795.             headTip = crLocs((0,35,0), 'headTip')
  1796.             headLocs['headTip'] = headTip
  1797.            
  1798.             for p in headLocs.iterkeys():
  1799.                 cmds.parent(headLocs[p], neckMov)
  1800.            
  1801.            
  1802.            
  1803.             for sc in headLocs.iterkeys():
  1804.                 cmds.setAttr(headLocs[sc] + '.scaleX', lock = True, keyable = False)
  1805.                 cmds.setAttr(headLocs[sc] + '.scaleY', lock = True, keyable = False)
  1806.                 cmds.setAttr(headLocs[sc] + '.scaleZ', lock = True, keyable = False)
  1807.                 cmds.setAttr(headLocs[sc] + '.visibility', lock = True, keyable = False)
  1808.            
  1809.             for sc in headLocs.iterkeys():
  1810.                 cmds.setAttr(headLocs[sc] + '.translateX', lock = True, keyable = False, channelBox = False)
  1811.            
  1812.            
  1813.             for loc in headLocs.iterkeys():
  1814.                 locShapes = cmds.listRelatives(headLocs[loc], shapes = True)[0]
  1815.                 cmds.setAttr(locShapes + '.overrideEnabled', 1)
  1816.                 cmds.setAttr(locShapes + '.overrideColor', 5)
  1817.                 cmds.setAttr(locShapes + '.localPositionX', lock = True, keyable = False, channelBox = False)
  1818.                 cmds.setAttr(locShapes + '.localPositionY', lock = True, keyable = False, channelBox = False)
  1819.                 cmds.setAttr(locShapes + '.localPositionZ', lock = True, keyable = False, channelBox = False)
  1820.                 cmds.setAttr(locShapes + '.localScaleX', .25, lock = True, keyable = False, channelBox = False)
  1821.                 cmds.setAttr(locShapes + '.localScaleY', .25, lock = True, keyable = False, channelBox = False)
  1822.                 cmds.setAttr(locShapes + '.localScaleZ', .25, lock = True, keyable = False, channelBox = False)
  1823.            
  1824.             # neck
  1825.            
  1826.             for p in neckLocs.iterkeys():
  1827.                 cmds.parent(neckLocs[p], neckMov)
  1828.            
  1829.            
  1830.            
  1831.             for sc in neckLocs.iterkeys():
  1832.                 cmds.setAttr(neckLocs[sc] + '.scaleX', lock = True, keyable = False)
  1833.                 cmds.setAttr(neckLocs[sc] + '.scaleY', lock = True, keyable = False)
  1834.                 cmds.setAttr(neckLocs[sc] + '.scaleZ', lock = True, keyable = False)
  1835.                 cmds.setAttr(neckLocs[sc] + '.visibility', lock = True, keyable = False)
  1836.            
  1837.             for sc in neckLocs.iterkeys():
  1838.                 cmds.setAttr(neckLocs[sc] + '.translateX', lock = True, keyable = False, channelBox = False)
  1839.            
  1840.            
  1841.             for loc in neckLocs.iterkeys():
  1842.                 locShapes = cmds.listRelatives(neckLocs[loc], shapes = True)[0]
  1843.                 cmds.setAttr(locShapes + '.overrideEnabled', 1)
  1844.                 cmds.setAttr(locShapes + '.overrideColor', 28)
  1845.                 cmds.setAttr(locShapes + '.localPositionX', lock = True, keyable = False, channelBox = False)
  1846.                 cmds.setAttr(locShapes + '.localPositionY', lock = True, keyable = False, channelBox = False)
  1847.                 cmds.setAttr(locShapes + '.localPositionZ', lock = True, keyable = False, channelBox = False)
  1848.                 cmds.setAttr(locShapes + '.localScaleX', .25, lock = True, keyable = False, channelBox = False)
  1849.                 cmds.setAttr(locShapes + '.localScaleY', .25, lock = True, keyable = False, channelBox = False)
  1850.                 cmds.setAttr(locShapes + '.localScaleZ', .25, lock = True, keyable = False, channelBox = False)
  1851.            
  1852.                 crCrv(chest, neckA)
  1853.                 crCrv(neckA, neckB)
  1854.                 crCrv(neckB, head)
  1855.                 crCrv(head, headTip)
  1856.            
  1857.        
  1858.        
  1859.        
  1860.        
  1861.         def crNeckB():
  1862.        
  1863.             neckA = crLocs((0,24.25,0), 'neckA')
  1864.             neckLocs['neckA'] = neckA
  1865.             neckB = crLocs((0,25.5,0), 'neckB')
  1866.             neckLocs['neckB'] = neckB
  1867.             neckC = crLocs((0,26.75,0), 'neckC')
  1868.             neckLocs['neckC'] = neckC
  1869.             head = crLocs((0,28,0), 'head')
  1870.             headLocs['head'] = head
  1871.             headTip = crLocs((0,35,0), 'headTip')
  1872.             headLocs['headTip'] = headTip
  1873.            
  1874.             for p in headLocs.iterkeys():
  1875.                 cmds.parent(headLocs[p], neckMov)
  1876.            
  1877.            
  1878.            
  1879.             for sc in headLocs.iterkeys():
  1880.                 cmds.setAttr(headLocs[sc] + '.scaleX', lock = True, keyable = False)
  1881.                 cmds.setAttr(headLocs[sc] + '.scaleY', lock = True, keyable = False)
  1882.                 cmds.setAttr(headLocs[sc] + '.scaleZ', lock = True, keyable = False)
  1883.                 cmds.setAttr(headLocs[sc] + '.visibility', lock = True, keyable = False)
  1884.            
  1885.             for sc in headLocs.iterkeys():
  1886.                 cmds.setAttr(headLocs[sc] + '.translateX', lock = True, keyable = False, channelBox = False)
  1887.            
  1888.            
  1889.             for loc in headLocs.iterkeys():
  1890.                 locShapes = cmds.listRelatives(headLocs[loc], shapes = True)[0]
  1891.                 cmds.setAttr(locShapes + '.overrideEnabled', 1)
  1892.                 cmds.setAttr(locShapes + '.overrideColor', 5)
  1893.                 cmds.setAttr(locShapes + '.localPositionX', lock = True, keyable = False, channelBox = False)
  1894.                 cmds.setAttr(locShapes + '.localPositionY', lock = True, keyable = False, channelBox = False)
  1895.                 cmds.setAttr(locShapes + '.localPositionZ', lock = True, keyable = False, channelBox = False)
  1896.                 cmds.setAttr(locShapes + '.localScaleX', .25, lock = True, keyable = False, channelBox = False)
  1897.                 cmds.setAttr(locShapes + '.localScaleY', .25, lock = True, keyable = False, channelBox = False)
  1898.                 cmds.setAttr(locShapes + '.localScaleZ', .25, lock = True, keyable = False, channelBox = False)
  1899.            
  1900.             # neck
  1901.            
  1902.             for p in neckLocs.iterkeys():
  1903.                 cmds.parent(neckLocs[p], neckMov)
  1904.            
  1905.            
  1906.            
  1907.             for sc in neckLocs.iterkeys():
  1908.                 cmds.setAttr(neckLocs[sc] + '.scaleX', lock = True, keyable = False)
  1909.                 cmds.setAttr(neckLocs[sc] + '.scaleY', lock = True, keyable = False)
  1910.                 cmds.setAttr(neckLocs[sc] + '.scaleZ', lock = True, keyable = False)
  1911.                 cmds.setAttr(neckLocs[sc] + '.visibility', lock = True, keyable = False)
  1912.            
  1913.             for sc in neckLocs.iterkeys():
  1914.                 cmds.setAttr(neckLocs[sc] + '.translateX', lock = True, keyable = False, channelBox = False)
  1915.            
  1916.            
  1917.             for loc in neckLocs.iterkeys():
  1918.                 locShapes = cmds.listRelatives(neckLocs[loc], shapes = True)[0]
  1919.                 cmds.setAttr(locShapes + '.overrideEnabled', 1)
  1920.                 cmds.setAttr(locShapes + '.overrideColor', 28)
  1921.                 cmds.setAttr(locShapes + '.localPositionX', lock = True, keyable = False, channelBox = False)
  1922.                 cmds.setAttr(locShapes + '.localPositionY', lock = True, keyable = False, channelBox = False)
  1923.                 cmds.setAttr(locShapes + '.localPositionZ', lock = True, keyable = False, channelBox = False)
  1924.                 cmds.setAttr(locShapes + '.localScaleX', .25, lock = True, keyable = False, channelBox = False)
  1925.                 cmds.setAttr(locShapes + '.localScaleY', .25, lock = True, keyable = False, channelBox = False)
  1926.                 cmds.setAttr(locShapes + '.localScaleZ', .25, lock = True, keyable = False, channelBox = False)
  1927.            
  1928.                 crCrv(chest, neckA)
  1929.                 crCrv(neckA, neckB)
  1930.                 crCrv(neckB, neckC)
  1931.                 crCrv(neckC, head)
  1932.                 crCrv(head, headTip)
  1933.        
  1934.        
  1935.        
  1936.        
  1937.        
  1938.         def crNeckC():
  1939.            
  1940.             neckA = crLocs((0,24,0), 'neckA')
  1941.             neckLocs['neckA'] = neckA
  1942.             neckB = crLocs((0,25,0), 'neckB')
  1943.             neckLocs['neckB'] = neckB
  1944.             neckC = crLocs((0,26,0), 'neckC')
  1945.             neckLocs['neckC'] = neckC
  1946.             neckD = crLocs((0,27,0), 'neckD')
  1947.             neckLocs['neckD'] = neckD
  1948.             head = crLocs((0,28,0), 'head')
  1949.             headLocs['head'] = head
  1950.             headTip = crLocs((0,35,0), 'headTip')
  1951.             headLocs['headTip'] = headTip
  1952.            
  1953.             for p in headLocs.iterkeys():
  1954.                 cmds.parent(headLocs[p], neckMov)
  1955.            
  1956.            
  1957.            
  1958.             for sc in headLocs.iterkeys():
  1959.                 cmds.setAttr(headLocs[sc] + '.scaleX', lock = True, keyable = False)
  1960.                 cmds.setAttr(headLocs[sc] + '.scaleY', lock = True, keyable = False)
  1961.                 cmds.setAttr(headLocs[sc] + '.scaleZ', lock = True, keyable = False)
  1962.                 cmds.setAttr(headLocs[sc] + '.visibility', lock = True, keyable = False)
  1963.            
  1964.             for sc in headLocs.iterkeys():
  1965.                 cmds.setAttr(headLocs[sc] + '.translateX', lock = True, keyable = False, channelBox = False)
  1966.            
  1967.            
  1968.             for loc in headLocs.iterkeys():
  1969.                 locShapes = cmds.listRelatives(headLocs[loc], shapes = True)[0]
  1970.                 cmds.setAttr(locShapes + '.overrideEnabled', 1)
  1971.                 cmds.setAttr(locShapes + '.overrideColor', 5)
  1972.                 cmds.setAttr(locShapes + '.localPositionX', lock = True, keyable = False, channelBox = False)
  1973.                 cmds.setAttr(locShapes + '.localPositionY', lock = True, keyable = False, channelBox = False)
  1974.                 cmds.setAttr(locShapes + '.localPositionZ', lock = True, keyable = False, channelBox = False)
  1975.                 cmds.setAttr(locShapes + '.localScaleX', .25, lock = True, keyable = False, channelBox = False)
  1976.                 cmds.setAttr(locShapes + '.localScaleY', .25, lock = True, keyable = False, channelBox = False)
  1977.                 cmds.setAttr(locShapes + '.localScaleZ', .25, lock = True, keyable = False, channelBox = False)
  1978.            
  1979.             # neck
  1980.            
  1981.             for p in neckLocs.iterkeys():
  1982.                 cmds.parent(neckLocs[p], neckMov)
  1983.            
  1984.            
  1985.            
  1986.             for sc in neckLocs.iterkeys():
  1987.                 cmds.setAttr(neckLocs[sc] + '.scaleX', lock = True, keyable = False)
  1988.                 cmds.setAttr(neckLocs[sc] + '.scaleY', lock = True, keyable = False)
  1989.                 cmds.setAttr(neckLocs[sc] + '.scaleZ', lock = True, keyable = False)
  1990.                 cmds.setAttr(neckLocs[sc] + '.visibility', lock = True, keyable = False)
  1991.            
  1992.             for sc in neckLocs.iterkeys():
  1993.                 cmds.setAttr(neckLocs[sc] + '.translateX', lock = True, keyable = False, channelBox = False)
  1994.            
  1995.            
  1996.             for loc in neckLocs.iterkeys():
  1997.                 locShapes = cmds.listRelatives(neckLocs[loc], shapes = True)[0]
  1998.                 cmds.setAttr(locShapes + '.overrideEnabled', 1)
  1999.                 cmds.setAttr(locShapes + '.overrideColor', 28)
  2000.                 cmds.setAttr(locShapes + '.localPositionX', lock = True, keyable = False, channelBox = False)
  2001.                 cmds.setAttr(locShapes + '.localPositionY', lock = True, keyable = False, channelBox = False)
  2002.                 cmds.setAttr(locShapes + '.localPositionZ', lock = True, keyable = False, channelBox = False)
  2003.                 cmds.setAttr(locShapes + '.localScaleX', .25, lock = True, keyable = False, channelBox = False)
  2004.                 cmds.setAttr(locShapes + '.localScaleY', .25, lock = True, keyable = False, channelBox = False)
  2005.                 cmds.setAttr(locShapes + '.localScaleZ', .25, lock = True, keyable = False, channelBox = False)
  2006.            
  2007.                 crCrv(chest, neckA)
  2008.                 crCrv(neckA, neckB)
  2009.                 crCrv(neckB, neckC)
  2010.                 crCrv(neckC, neckD)
  2011.                 crCrv(neckD, head)
  2012.                 crCrv(head, headTip)
  2013.  
  2014.         # CREATE NECK AND SPINE
  2015.        
  2016.         if cmds.radioButtonGrp('spineRadio', q = True, sl = True) ==1:
  2017.             crSpineA()
  2018.         elif cmds.radioButtonGrp('spineRadio', q = True, sl = True) ==2:
  2019.             crSpineB()
  2020.         elif cmds.radioButtonGrp('spineRadio', q = True, sl = True) ==3:
  2021.             crSpineC()
  2022.        
  2023.         if cmds.radioButtonGrp('neckRadio', q = True, sl = True) ==1:
  2024.             crNeckA()
  2025.         elif cmds.radioButtonGrp('neckRadio', q = True, sl = True) ==2:
  2026.             crNeckB()
  2027.         elif cmds.radioButtonGrp('neckRadio', q = True, sl = True) ==3:
  2028.             crNeckC()
  2029.        
  2030.         # FINISH UP        
  2031.        
  2032.         cmds.select(cl = True)
  2033.  
  2034.         print 'Dummy Built Successfully',
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement