#------------------------------
# Track2ipo script V3
# (c) jmsoler 23/11/2006
#
# Ce script cree des courbes ipo a partir
# des mouvements de rotation effectue par
# l'objet SELECTIONNE' quand il traque un autre
# objet uniquement sur un constrain de type
# trackto .
# une fenetre de typ emenu popup permet de
# choisir l'image de depart et de fin
#
# Plus adapte' au old Trackto qui necessite un
# retrait du lien qui unit l'objet a sa cible
#------------------------------
import Blender
from Blender import Scene,Object, Ipo, BezTriple, Mathutils
endframe = Blender.Get('endframe')
staframe = Blender.Get('staframe')
SF = Blender.Draw.Create(staframe)
EF = Blender.Draw.Create(endframe)
untrack = Blender.Draw.Create(0)
block = []
block.append(("startFrame: ", SF, staframe, endframe))
block.append(("EndFrame: ", EF, staframe, endframe))
block.append(("Untrack", untrack, "remove trackto"))
retval = Blender.Draw.PupBlock("Track 2 Ipo", block)
if retval :
POSLIST=[]
for f in range(SF.val,EF.val) :
Blender.Set('curframe',f)
time= Blender.Get('curtime')
OBJ=Scene.getCurrent().getActiveObject()
if OBJ.getIpo() :
IPO=OBJ.getIpo()
else:
IPO=Ipo.New('Object', 'ObIpo')
IPO.addCurve('RotX')
IPO.addCurve('RotY')
IPO.addCurve('RotZ')
OBJ.setIpo(IPO)
MATRIX=OBJ.getMatrix()
EULER=MATRIX.toEuler()
POSLIST.append([time,EULER])
if POSLIST :
for P in POSLIST :
ipoX = IPO[Ipo.OB_ROTX]
point=BezTriple.New()
point.pt=(P[0], P[1][0]/10.0)
point.handleTypes=[1,1]
ipoX.append(point)
ipoY = IPO[Ipo.OB_ROTY]
point=BezTriple.New()
point.pt=(P[0], P[1][1]/10.0)
point.handleTypes=[1,1]
ipoY.append(point)
ipoZ = IPO[Ipo.OB_ROTZ]
point=BezTriple.New()
point.pt=(P[0], P[1][2]/10.0)
point.handleTypes=[1,1]
ipoZ.append(point)
if untrack.val==1 : OBJ.clearTrack(1,1)
|