cwisbg

bake to world v2

Jul 12th, 2018
425
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.10 KB | None | 0 0
  1. # bake to world v2
  2. from pymel.core import *
  3. import time
  4. def grpr(name):
  5.     g = ls(name)
  6.     if not g:
  7.         g = group(n=name,em=1)
  8.     return g
  9. def getPiv(s):
  10.     select(s)
  11.     setToolTo('Move')
  12.     piv = manipMoveContext('Move', q=True, p=True,m=2)
  13.     return piv  
  14.    
  15. class toWorldObj:
  16.     def __init__(self, jntObj):
  17.         self.jnt = jntObj
  18.         self.jntSaver = spaceLocator(n= jntObj+"_saver")
  19.         self.pc = parentConstraint(jntObj, self.jntSaver, mo=0)
  20.         self.sc = scaleConstraint(jntObj, self.jntSaver, mo=0)  
  21.         self.scaleList = []
  22.  
  23.  
  24.  
  25.  
  26.  
  27. tStart = int(playbackOptions(q=1,ast=1))
  28. tEnd = int(playbackOptions(q=1,aet=1))+1    
  29. start = time.clock()
  30.  
  31. # create locators to follow/save joint positions
  32. worldLocations = []
  33. saveConstraintsLocators = []
  34. sl = selected()
  35. lctrCleanup = []
  36. i = 1
  37. for s in sl:
  38.     add = toWorldObj(s)
  39.     worldLocations.append(add)
  40.     i += 1
  41.  
  42. # Bake joint animations to locators
  43. for i in range(tStart,tEnd):
  44.     currentTime(i, e=1, u=1)
  45.     for l in worldLocations:
  46.         setKeyframe(str(l.jntSaver)+".translate")
  47.         setKeyframe(str(l.jntSaver)+".rotate")
  48.         currentScale = l.jntSaver.getScale()
  49.         l.scaleList.append(currentScale)
  50.         if i == tStart:
  51.            setAttr(str(l.jntSaver)+".blendParent1", 1)
  52.            
  53.      
  54. # clean out constraints from locators, add constraints to drive joints from locators.
  55.  
  56. cleanUpList = []
  57. toParent = []
  58. for l in worldLocations:
  59.     delete(l.pc, l.sc)
  60.     p = parent(l.jnt,w=1,r=1)
  61.     toParent.append(l.jnt)
  62.     pc = parentConstraint(l.jntSaver,l.jnt)
  63.     cleanUpList.append(pc)
  64.     cleanUpList.append(l.jntSaver)
  65.  
  66.  
  67.  
  68. # bake animation from locators back on to joints
  69. for i in range(tStart,tEnd):
  70.     currentTime(i, e=1, u=1)
  71.     for l in worldLocations:
  72.         setKeyframe(str(l.jnt)+".translate")
  73.         setKeyframe(str(l.jnt)+".rotate")
  74.         setAttr(str(l.jnt)+".scale", l.scaleList[i-1])
  75.         setKeyframe(str(l.jnt)+".scale")
  76.  
  77. delete(cleanUpList)
  78. newGrp = grpr("BakedToWorld")
  79. parent(toParent, newGrp)    
  80. print (time.clock() - start)
Advertisement
Add Comment
Please, Sign In to add comment