fix [#34805] Bake action ignores parent motion

in fact this is more feature request.
add an option to bake a parented objects animation, then clear the parent and apply the action.
This commit is contained in:
Campbell Barton
2013-04-11 08:42:25 +00:00
parent acac5b8402
commit 577a1b9239
2 changed files with 23 additions and 2 deletions

View File

@@ -32,6 +32,7 @@ def bake_action(frame_start,
do_pose=True,
do_object=True,
do_constraint_clear=False,
do_parents_clear=False,
do_clean=False,
action=None,
):
@@ -54,6 +55,8 @@ def bake_action(frame_start,
:type do_object: bool
:arg do_constraint_clear: Remove constraints (and do 'visual keying').
:type do_constraint_clear: bool
:arg do_parents_clear: Unparent after baking objects.
:type do_parents_clear: bool
:arg do_clean: Remove redundant keyframes after baking.
:type do_clean: bool
:arg action: An action to bake the data into, or None for a new action
@@ -77,8 +80,17 @@ def bake_action(frame_start,
matrix[name] = pbone.matrix_basis.copy()
return matrix
def obj_frame_info(obj, do_visual_keying):
return obj.matrix_local.copy() if do_visual_keying else obj.matrix_basis.copy()
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
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()
# -------------------------------------------------------------------------
# Setup the Context
@@ -192,6 +204,9 @@ def bake_action(frame_start,
obj.keyframe_insert("scale", -1, f, name, options)
if do_parents_clear:
obj.parent = None
# -------------------------------------------------------------------------
# Clean