cwisbg

Fk- Ik _vWORK

Aug 29th, 2014
429
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 8.50 KB | None | 0 0
  1. # ik-fk v1
  2. # Select shoulder joint
  3. # only works with shoulder, elbow, wrist, and hand/foot joint set-ups
  4. from pymel.core import *
  5. def getPiv(s):
  6.     select(s)
  7.     setToolTo('Move')
  8.     piv = manipMoveContext('Move', q=True, p=True,m=2)  
  9.     return piv    
  10. def getChain(s):
  11.     print "gettign chain"
  12.     jntChain = []
  13.     limit = 4
  14.     x = [s]
  15.     while limit:
  16.         jntChain.append(x)
  17.         x = listRelatives(x,c=1)
  18.         limit -= 1
  19.     return jntChain
  20.     print "returning ", jntChain
  21. def grpr(name):
  22.     g = ls(name)
  23.     if not g:
  24.         g = group(n=name,em=1)
  25.     return g
  26. def getPolePos(chain):
  27.     root = chain[0]
  28.     elbow = chain[1]
  29.     wrist = chain[2]
  30.     l = spaceLocator(n="test")
  31.     pc = pointConstraint([root[0],wrist[0]], l,mo=0)
  32.     ac = aimConstraint(elbow, l,aim = (0,0,1))
  33.     delete(pc,ac)
  34.     pc2 = pointConstraint(elbow, l)
  35.     delete(pc2)
  36.     move(l,0,0,5,os=1,r=1)
  37.     lt = l.getTranslation()
  38.     delete(l)
  39.     return lt
  40. def makeFk(jntChain,mainCtrl):
  41.     x = 0
  42.     jntChainFk = duplicate(jntChain, n = jntChain[0][0]+"_fk")[0]
  43.     fkMasterGrp = grpr(mainCtrl+"fk_master_grp")
  44.     parent(jntChainFk,fkMasterGrp)
  45.     jntChain = getChain(jntChainFk)
  46.     #ctrlMasterGrp = grpr(jntChainFk[0]+"_fkCtrlGrp")
  47.     #parent(ctrlMasterGrp,fkMasterGrp)
  48.     jntChain = jntChain[:-1]
  49.     fkCtrls = []
  50.     for jnt in jntChain:
  51.         jnt = jnt[0]
  52.         ctrl = circle(n=jnt+"_fkCtrl")
  53.         fkCtrls.append(ctrl)
  54.         rotate(ctrl, 0,90,0)
  55.         #makeIdentity(ctrl,a=1,t=1,r=1,s=1,n=0)
  56.         #ctrlGrp = group(ctrl, n = ctrl[0]+"_grp",p=ctrlMasterGrp )
  57.         tp = parentConstraint(jnt, ctrl)
  58.         delete(tp)      
  59.         ac = aimConstraint(jnt.listRelatives(c=1), ctrl,aim = (0,0,1))
  60.         delete(ac)
  61.         ctrlGrp = zeroGrp(ctrl)
  62.         parent(ctrlGrp, fkMasterGrp)
  63.         oc = orientConstraint(ctrl,jnt,mo=1)
  64.         if x == 0:
  65.             parent(jnt,ctrl[0])
  66.             pass
  67.         else:
  68.             pc = parentConstraint(jntChain[x-1][0],ctrlGrp,mo=1)
  69.             setAttr(ctrl[0].tx, k=0)  
  70.             setAttr(ctrl[0].ty, k=0)
  71.             setAttr(ctrl[0].tz, k=0)          
  72.             setAttr(ctrl[0].tx, k=0, cb=0)
  73.             setAttr(ctrl[0].ty, k=0, cb=0)
  74.             setAttr(ctrl[0].tz, k=0, cb=0)
  75.         if x == 0:
  76.             fkRootCtrl = ctrl
  77.         # Lock attributes
  78.         setAttr(ctrl[0].sx, l=1)  
  79.         setAttr(ctrl[0].sy, l=1)
  80.         setAttr(ctrl[0].sz, l=1)
  81.         setAttr(ctrl[0].tx, l=1)  
  82.         setAttr(ctrl[0].ty, l=1)
  83.         setAttr(ctrl[0].tz, l=1)
  84.         setAttr(ctrl[0].sx, k=0, cb=0)
  85.         setAttr(ctrl[0].sy, k=0, cb=0)
  86.         setAttr(ctrl[0].sz, k=0, cb=0)
  87.         setAttr(ctrl[0].tx, k=0, cb=0)
  88.         setAttr(ctrl[0].ty, k=0, cb=0)
  89.         setAttr(ctrl[0].tz, k=0, cb=0)  
  90.         x += 1
  91.     return fkMasterGrp,jntChain , fkCtrls
  92.  
  93.  
  94.    
  95. def zeroGrp(s):
  96.     s = s[0]
  97.     pap = listRelatives(s,p=1)
  98.     pos = s.getTranslation()
  99.     rot = s.getRotation()
  100.     scl = s.getScale()
  101.     nwGrp = group(em=1, n= s+"_zeroGrp")
  102.     move(s, 0,0,0)
  103.     rotate(s,0,0,0)
  104.     scale(s,1,1,1)
  105.     parent(s,nwGrp)
  106.     move(nwGrp, pos)
  107.     rotate(nwGrp, rot)
  108.     scale(nwGrp, scl)
  109.     if pap:
  110.         parent(nwGrp,pap)
  111.     return nwGrp
  112.  
  113. def makeMainCtrl(chain):
  114.     wrist = chain[2][0]
  115.     #wristCtlPosition = getPiv(wrist)
  116.     mainCtrl = circle(n=chain[0][0]+"_mainCtrl_", r = .5,ch=0)
  117.     pc = parentConstraint(wrist,mainCtrl)
  118.     delete(pc)
  119.     rotate(mainCtrl,0,90,0,r=1)
  120.     move(mainCtrl[0],0,4,0,r=1)
  121.     heroCtrlGrp = zeroGrp(mainCtrl)
  122.     zGrp = listRelatives(mainCtrl,p=1)
  123.     pc = parentConstraint(wrist,zGrp,mo=1)
  124.     parent(heroCtrlGrp,masterArmRigCtrlGrp)
  125.     return  mainCtrl
  126.  
  127. def getikChain(s):
  128.     jntChain = []
  129.     x = [s]
  130.     limit = 4
  131.     while limit:
  132.         jntChain.append(x)
  133.         x = listRelatives(x,c=1)
  134.         limit -= 1
  135.     return jntChain  
  136. def makeIk(jntChain,mainCtrl):
  137.     x = 0
  138.     jntChainik = duplicate(jntChain, n = jntChain[0][0]+"_ik")[0]
  139.     fkMasterGrp = grpr(mainCtrl[0]+"ik_master_grp")
  140.     jntChain = getikChain(jntChainik)
  141.     jntChainSave = jntChain
  142.     handJnt = jntChain[-2][0]
  143.     jntChain = jntChain[0]
  144.     #ctrlMasterGrp = group(n = jntChainik[0]+"_ikCtrlGrp", em=1)
  145.     #parent(ctrlMasterGrp,fkMasterGrp)    
  146.     #parent(jntChainik,ctrlMasterGrp)
  147.     ctrlJnts = [jntChain[0],handJnt]
  148.     i = 0
  149.     for jnts in ctrlJnts:
  150.         ctrl = circle(n=mainCtrl[0]+"_ikCtrl",ch=0)
  151.         tp =parentConstraint(jnts, ctrl)
  152.         delete(tp)
  153.         ac = aimConstraint(jnts.listRelatives(c=1), ctrl,aim = (0,0,1))
  154.         delete(ac)
  155.         ctrlGrp = zeroGrp(ctrl)
  156.         if i == 0:
  157.             rootCtrl = ctrl
  158.         parent(ctrlGrp,fkMasterGrp)
  159.         i += 1
  160.     pPos = getPolePos(jntChainSave)
  161.     poleVCtrl = circle(n=mainCtrl[0]+"_poleVectorCtrl", r = .5,ch=0)
  162.     move(poleVCtrl[0], pPos)
  163.     poleVCtrlGrp = zeroGrp(poleVCtrl)
  164.     parent(poleVCtrlGrp,fkMasterGrp)
  165.     ikhand = ikHandle(sj = jntChain[0], ee = handJnt,sol = "ikRPsolver" )
  166.     parent(ikhand[0],ctrl)
  167.     parent(jntChain[0],rootCtrl)
  168.     parent(poleVCtrlGrp,fkMasterGrp)
  169.     oc = orientConstraint(ctrl,handJnt,mo=1)
  170.     poleVec = poleVectorConstraint(poleVCtrl,ikhand[0],w=1)
  171.     return fkMasterGrp,jntChainSave, rootCtrl, ctrl, poleVCtrl
  172.    
  173.    
  174.    
  175. def connectStuff(jnts,mainCtrl,fkChain,ikChain, rootFks,rootIk, ctrlIk, poleVCtrl):
  176.     #ojntChain = getChain(jnts)
  177.     fkIkBlendAttr = addAttr(mainCtrl[0], ln="fk_ik_switch", at="double",min=0,max=1,dv=0)
  178.     setAttr(mainCtrl[0]+".fk_ik_switch",  e=1, k=1)
  179.     mainCtrl= mainCtrl[0]
  180.     i = 0
  181.     ojntChain = jnts[:-1]
  182.     for o in ojntChain:
  183.         of = o[0].split("|")[-1]
  184.         blendOc = orientConstraint([fkChain[i][0],ikChain[i][0]],ojntChain[i][0], n = of+"_fkIkConstraint")
  185.         ocList = orientConstraint(blendOc,q=1,tl=1)  
  186.         print ocList
  187.  
  188.         ikJnt = ocList[1].split("|")[-1]
  189.         fkJnt = ocList[0].split("|")[-1]
  190.        
  191.         if i == 0:
  192.             pc = pointConstraint([fkChain[i][0],ikChain[i][0]],ojntChain[i][0], n = of+"_pointConstraint")
  193.             # Root Snapping
  194.             setDrivenKeyframe(pc+"."+fkJnt+"W0", cd = mainCtrl+".fk_ik_switch", v=1, dv=0)
  195.             setDrivenKeyframe(pc+"."+ikJnt+"W1", cd = mainCtrl+".fk_ik_switch", v=0, dv=0)
  196.             setDrivenKeyframe(pc+"."+fkJnt+"W0", cd = mainCtrl+".fk_ik_switch", v=0, dv=1)
  197.             setDrivenKeyframe(pc+"."+ikJnt+"W1", cd = mainCtrl+".fk_ik_switch", v=1, dv=1)
  198.        
  199.                
  200.                                  
  201.         # Ik Fk blending                  
  202.         #print rootFk[0],rootIk[0]
  203.         for jnt in rootFks:
  204.             setDrivenKeyframe(jnt[0].visibility, cd = mainCtrl+".fk_ik_switch", v=1, dv=0)# fk visablility
  205.             setDrivenKeyframe(jnt[0].visibility, cd = mainCtrl+".fk_ik_switch", v=0, dv=1)
  206.         # ik root
  207.         setDrivenKeyframe(rootIk[0].visibility, cd = mainCtrl+".fk_ik_switch", v=0, dv=0)# Ik visablility
  208.         setDrivenKeyframe(rootIk[0].visibility, cd = mainCtrl+".fk_ik_switch", v=1, dv=1)
  209.         # ik ctrl
  210.         setDrivenKeyframe(ctrlIk[0].visibility, cd = mainCtrl+".fk_ik_switch", v=1, dv=1)
  211.         setDrivenKeyframe(ctrlIk[0].visibility, cd = mainCtrl+".fk_ik_switch", v=0, dv=0)
  212.         ##
  213.         setDrivenKeyframe(poleVCtrl[0].visibility, cd = mainCtrl+".fk_ik_switch", v=1, dv=1)
  214.         setDrivenKeyframe(poleVCtrl[0].visibility, cd = mainCtrl+".fk_ik_switch", v=0, dv=0)
  215.         ##              
  216.         setDrivenKeyframe(blendOc+"."+fkJnt+"W0", cd = mainCtrl+".fk_ik_switch", v=1, dv=0)
  217.         setDrivenKeyframe(blendOc+"."+fkJnt+"W0", cd = mainCtrl+".fk_ik_switch", v=0, dv=1)
  218.         setDrivenKeyframe(blendOc+"."+ikJnt+"W1", cd = mainCtrl+".fk_ik_switch", v=0, dv=0)
  219.         setDrivenKeyframe(blendOc+"."+ikJnt+"W1", cd = mainCtrl+".fk_ik_switch", v=1, dv=1)
  220.        
  221.         i += 1  
  222.        
  223.     print "Done Connecting things"
  224. sl = selected()
  225. jnts = sl[0]
  226. jnts = getChain(jnts)
  227. global masterArmRigCtrlGrp
  228. name = "R_masterArmRigCtrlGrp"
  229. masterArmRigCtrlGrp = grpr(name)
  230. mainCtrl = makeMainCtrl(jnts)
  231.  
  232. #makeFk(jnts, mainCtrl)
  233. #makeIk(jnts, mainCtrl)
  234.  
  235. fkMasterGrp, fkChain, rootFks = makeFk(jnts, mainCtrl[0])
  236. ikMasterGrp, ikChain, rootIk, ctrlIk, poleVCtrl = makeIk(jnts, mainCtrl)
  237. connectStuff(jnts,mainCtrl,fkChain,ikChain, rootFks,rootIk, ctrlIk,poleVCtrl)
  238. parent([fkMasterGrp,ikMasterGrp],masterArmRigCtrlGrp)
  239. print jnts[0][0].root()
  240. pc = parentConstraint(masterArmRigCtrlGrp,jnts[0][0].root().split("|")[0],mo=1)
  241.  
  242. print "done"
Advertisement
Add Comment
Please, Sign In to add comment