4 def __init__(self, curve):
8 for i in range(len(self.keyframe_points)-1):
9 kf1 = self.keyframe_points[i]
10 kf2 = self.keyframe_points[i+1]
11 dx = (kf2.co[0]-kf1.co[0])/3
12 slope1 = (kf1.handle_right[1]-kf1.co[1])/(kf1.handle_right[0]-kf1.co[0])
13 slope2 = (kf2.co[1]-kf2.handle_left[1])/(kf2.co[0]-kf2.handle_left[0])
16 self.knots.append(mathutils.Vector(kf1.co))
17 self.knots.append(kf1.co+mathutils.Vector((dx, slope1*dx)))
18 self.knots.append(kf2.co-mathutils.Vector((dx, slope2*dx)))
19 self.knots.append(mathutils.Vector(kf2.co))
21 def __getattr__(self, attr):
22 return getattr(self._curve, attr)
26 def __init__(self, time):
33 def __init__(self, action):
35 self.curves = [Curve(c) for c in action.fcurves]
39 for i in range(0, len(c.knots)-1, 3):
45 t = (p0[0]*(50-j)+p3[0]*j)/50
46 x = (t-p0[0])/(p3[0]-p0[0])
47 v1 = c._curve.evaluate(t)
48 v2 = p0[1]*(1-x)**3+3*p1[1]*x*(1-x)**2+3*p2[1]*x**2*(1-x)+p3[1]*x**3
50 keyframes_by_time = {}
54 for i, k in enumerate(c.knots):
57 kf_map = controls_by_time if control else keyframes_by_time
63 self.keyframes.append(kf)
65 kf.curves.append((c, i))
67 self.keyframes.sort(key=lambda k: k.time)
68 self.start_time = self.keyframes[0].time
72 k[0] -= self.start_time
74 for k in self.keyframes:
75 k.time -= self.start_time
77 def __getattr__(self, attr):
78 return getattr(self._curve, attr)
80 def change_fps(self, fps):
88 for k in self.keyframes:
92 def create_animation_from_action(context, action):
93 anim = Animation(action)
94 render = context.scene.render
95 anim.change_fps(render.fps/render.fps_base)