[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