[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [50199] trunk/blender/release/scripts/ modules/bpy_extras/anim_utils.py: baking actions with euler rotations now uses compatible eulers for pose and object bakes .
Campbell Barton
ideasman42 at gmail.com
Sat Aug 25 14:37:15 CEST 2012
Revision: 50199
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=50199
Author: campbellbarton
Date: 2012-08-25 12:37:15 +0000 (Sat, 25 Aug 2012)
Log Message:
-----------
baking actions with euler rotations now uses compatible eulers for pose and object bakes.
Modified Paths:
--------------
trunk/blender/release/scripts/modules/bpy_extras/anim_utils.py
Modified: trunk/blender/release/scripts/modules/bpy_extras/anim_utils.py
===================================================================
--- trunk/blender/release/scripts/modules/bpy_extras/anim_utils.py 2012-08-25 12:32:22 UTC (rev 50198)
+++ trunk/blender/release/scripts/modules/bpy_extras/anim_utils.py 2012-08-25 12:37:15 UTC (rev 50199)
@@ -68,7 +68,7 @@
# Helper Functions
def pose_frame_info(obj):
- from mathutils import Matrix
+ from mathutils import Matrix, Euler
info = {}
@@ -181,6 +181,9 @@
while pbone.constraints:
pbone.constraints.remove(pbone.constraints[0])
+ # create compatible eulers
+ euler_prev = None
+
for f in frame_range:
f_step = (f - frame_start) // frame_step
matrix = pose_info[f_step][name]["matrix_key"]
@@ -198,8 +201,19 @@
elif rotation_mode == 'AXIS_ANGLE':
pbone.keyframe_insert("rotation_axis_angle", -1, f, name)
else: # euler, XYZ, ZXY etc
+
+ if euler_prev is not None:
+ euler = pbone.rotation_euler.copy()
+ euler.make_compatible(euler_prev)
+ pbone.rotation_euler = euler
+ euler_prev = euler
+ del euler
+
pbone.keyframe_insert("rotation_euler", -1, f, name)
+ if euler_prev is None:
+ euler_prev = pbone.rotation_euler.copy()
+
pbone.keyframe_insert("scale", -1, f, name)
# object. TODO. multiple objects
@@ -208,6 +222,9 @@
while obj.constraints:
obj.constraints.remove(obj.constraints[0])
+ # create compatible eulers
+ euler_prev = None
+
for f in frame_range:
matrix = obj_info[(f - frame_start) // frame_step]["matrix_key"]
obj.matrix_local = matrix
@@ -221,8 +238,18 @@
elif rotation_mode == 'AXIS_ANGLE':
obj.keyframe_insert("rotation_axis_angle", -1, f)
else: # euler, XYZ, ZXY etc
+ if euler_prev is not None:
+ euler = obj.rotation_euler.copy()
+ euler.make_compatible(euler_prev)
+ obj.rotation_euler = euler
+ euler_prev = euler
+ del euler
+
obj.keyframe_insert("rotation_euler", -1, f)
+ if euler_prev is None:
+ euler_prev = obj.rotation_euler.copy()
+
obj.keyframe_insert("scale", -1, f)
scene.frame_set(frame_back)
More information about the Bf-blender-cvs
mailing list