From 7132bfe66440c66ba494cbea7c4f1bca8e983f4e Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 4 Jul 2013 23:52:02 +0000 Subject: fix [#35977] Bake Action doesn't work properly there are cases where you want to use visual-keying but not remove constraints, also it wasnt obvious that clearing constraints used a different method of keyframing. So split these into 2 options. --- release/scripts/modules/bpy_extras/anim_utils.py | 14 +++++++++----- release/scripts/startup/bl_operators/anim.py | 6 ++++++ 2 files changed, 15 insertions(+), 5 deletions(-) (limited to 'release') diff --git a/release/scripts/modules/bpy_extras/anim_utils.py b/release/scripts/modules/bpy_extras/anim_utils.py index c9ed91d3a83..d87c207e2d0 100644 --- a/release/scripts/modules/bpy_extras/anim_utils.py +++ b/release/scripts/modules/bpy_extras/anim_utils.py @@ -31,6 +31,7 @@ def bake_action(frame_start, only_selected=False, do_pose=True, do_object=True, + do_visual_keying=True, do_constraint_clear=False, do_parents_clear=False, do_clean=False, @@ -53,7 +54,9 @@ def bake_action(frame_start, :type do_pose: bool :arg do_object: Bake objects. :type do_object: bool - :arg do_constraint_clear: Remove constraints (and do 'visual keying'). + :arg do_visual_keying: Use the final transformations for baking ('visual keying') + :type do_visual_keying: bool + :arg do_constraint_clear: Remove constraints after baking. :type do_constraint_clear: bool :arg do_parents_clear: Unparent after baking objects. :type do_parents_clear: bool @@ -83,14 +86,14 @@ def bake_action(frame_start, if do_parents_clear: def obj_frame_info(obj, do_visual_keying): parent = obj.parent - matrix = obj.matrix_local if do_visual_keying else obj.matrix_basis + matrix = obj.matrix_local if do_visual_keying else obj.matrix_local if parent: return parent.matrix_world * matrix else: return matrix.copy() else: def obj_frame_info(obj, do_visual_keying): - return obj.matrix_local.copy() if do_visual_keying else obj.matrix_basis.copy() + return obj.matrix_local.copy() if do_visual_keying else obj.matrix_local.copy() # ------------------------------------------------------------------------- # Setup the Context @@ -118,10 +121,11 @@ def bake_action(frame_start, for f in frame_range: scene.frame_set(f) + scene.update() if do_pose: - pose_info.append(pose_frame_info(obj, do_constraint_clear)) + pose_info.append(pose_frame_info(obj, do_visual_keying)) if do_object: - obj_info.append(obj_frame_info(obj, do_constraint_clear)) + obj_info.append(obj_frame_info(obj, do_visual_keying)) # ------------------------------------------------------------------------- # Create action diff --git a/release/scripts/startup/bl_operators/anim.py b/release/scripts/startup/bl_operators/anim.py index ed20cb22297..6193611504e 100644 --- a/release/scripts/startup/bl_operators/anim.py +++ b/release/scripts/startup/bl_operators/anim.py @@ -190,6 +190,11 @@ class BakeAction(Operator): description="Only key selected object/bones", default=True, ) + visual_keying = BoolProperty( + name="Visual Keying", + description="Keyframe from the final transformations (with constraints applied)", + default=False, + ) clear_constraints = BoolProperty( name="Clear Constraints", description="Remove all constraints from keyed object/bones, and do 'visual' keying", @@ -220,6 +225,7 @@ class BakeAction(Operator): only_selected=self.only_selected, do_pose='POSE' in self.bake_types, do_object='OBJECT' in self.bake_types, + do_visual_keying=self.visual_keying, do_constraint_clear=self.clear_constraints, do_parents_clear=self.clear_parents, do_clean=True, -- cgit v1.2.3