diff options
author | Joshua Leung <aligorith@gmail.com> | 2011-03-24 06:02:34 +0300 |
---|---|---|
committer | Joshua Leung <aligorith@gmail.com> | 2011-03-24 06:02:34 +0300 |
commit | eef811a0954ad67a4667592c85cd95822d15e17c (patch) | |
tree | 43c252be6af9cd5c01595de87b2e148c3124de56 /release | |
parent | c210b3991a074f27af80178c85d0658c4041480b (diff) |
Animation Tool: Propagate Pose
This tool automates the process of copying a pose to successive
keyframes, making it easier for animators to go back and change the
pose for some controls which remain "static" for periods of time.
Previously, animators would need to do a "{Ctrl-Pageup Ctrl-V} *
number_of_static_keyframes" dance for each set of controls that this
happened on, which is not too good ergonomically speaking.
There are two modes exposed via the menu (Pose->Propagate):
- "Pose Propagate" - also known as the 'WHILE_HELD' mode, which
propagates to all keyframes that are holding the same value
- "To Next Keyframe" - which only propagates the pose to the closest
keyframe in the occurring after (but not including) the current frame
Additionally, there are a few other modes that can be used, though
they are less useful for direct use from the UI, though they can be
used via the PyAPI as need be.
---
Also, I did some cleanups in the "Pose" menu to bring it more into
line with the Object mode one. There are some more tweaks that could
still be done here, such as bringing the keyframing operator entries
under a submenu too (as in the Object mode version) to get the length
of this under control.
Diffstat (limited to 'release')
-rw-r--r-- | release/scripts/startup/bl_ui/space_view3d.py | 60 |
1 files changed, 40 insertions, 20 deletions
diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py index 31704173258..bbeb76d2cb1 100644 --- a/release/scripts/startup/bl_ui/space_view3d.py +++ b/release/scripts/startup/bl_ui/space_view3d.py @@ -177,10 +177,6 @@ class VIEW3D_MT_transform(bpy.types.Menu): layout.operator("object.origin_set", text="Origin to Geometry").type = 'ORIGIN_GEOMETRY' layout.operator("object.origin_set", text="Origin to 3D Cursor").type = 'ORIGIN_CURSOR' - if context.mode == 'OBJECT': - layout.operator("object.align") - layout.operator("object.randomize_transform") - class VIEW3D_MT_mirror(bpy.types.Menu): bl_label = "Mirror" @@ -254,14 +250,6 @@ class VIEW3D_MT_uv_map(bpy.types.Menu): layout.operator("uv.reset") - layout.separator() - - # python scripts - layout.operator_context = 'INVOKE_REGION_WIN' - layout.operator("uv.smart_project") - layout.operator("uv.lightmap_pack") - layout.operator("uv.follow_active_quads") - # ********** View menus ********** @@ -1172,23 +1160,23 @@ class VIEW3D_MT_pose(bpy.types.Menu): layout.separator() layout.menu("VIEW3D_MT_transform") - layout.menu("VIEW3D_MT_snap") layout.menu("VIEW3D_MT_pose_transform") + layout.menu("VIEW3D_MT_pose_apply") + + layout.menu("VIEW3D_MT_snap") layout.separator() + # TODO: make this an "Animation" menu like we have for object? layout.operator("anim.keyframe_insert_menu", text="Insert Keyframe...") layout.operator("anim.keyframe_delete_v3d", text="Delete Keyframe...") layout.operator("anim.keying_set_active_set", text="Change Keying Set...") layout.separator() - layout.operator("pose.relax") - - layout.separator() - - layout.menu("VIEW3D_MT_pose_apply") + layout.menu("VIEW3D_MT_pose_slide") + layout.menu("VIEW3D_MT_pose_propagate") layout.separator() @@ -1198,7 +1186,7 @@ class VIEW3D_MT_pose(bpy.types.Menu): layout.separator() - layout.menu("VIEW3D_MT_pose_pose") + layout.menu("VIEW3D_MT_pose_library") layout.menu("VIEW3D_MT_pose_motion") layout.menu("VIEW3D_MT_pose_group") @@ -1246,7 +1234,28 @@ class VIEW3D_MT_pose_transform(bpy.types.Menu): layout.label(text="Origin") -class VIEW3D_MT_pose_pose(bpy.types.Menu): +class VIEW3D_MT_pose_slide(bpy.types.Menu): + bl_label = "In-Betweens" + + def draw(self, context): + layout = self.layout + + layout.operator("pose.push") + layout.operator("pose.relax") + layout.operator("pose.breakdown") + + +class VIEW3D_MT_pose_propagate(bpy.types.Menu): + bl_label = "Propagate" + + def draw(self, context): + layout = self.layout + + layout.operator("pose.propagate") + layout.operator("pose.propagate", text="To Next Keyframe").mode = 'NEXT_KEY' + + +class VIEW3D_MT_pose_library(bpy.types.Menu): bl_label = "Pose Library" def draw(self, context): @@ -2313,3 +2322,14 @@ class VIEW3D_PT_context_properties(bpy.types.Panel): if member: # Draw with no edit button rna_prop_ui.draw(self.layout, context, member, object, False) + + +def register(): + bpy.utils.register_module(__name__) + + +def unregister(): + bpy.utils.unregister_module(__name__) + +if __name__ == "__main__": + register() |