Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoshua Leung <aligorith@gmail.com>2012-06-01 19:00:28 +0400
committerJoshua Leung <aligorith@gmail.com>2012-06-01 19:00:28 +0400
commit392ee8fc6a553e6bb35efe3dc9a5486fe50da7e9 (patch)
tree94d20ce108ac578c53371859cf1d0ece3f401edc /source/blender/editors/space_action
parent07ce209c64d47b7773b473d31abdddac6f404c71 (diff)
Tweaks for Pasting Keyframes in DopeSheet/Graph Editors
In response to [#31670], I've reviewed the way that the Paste Keyframes tool for the DopeSheet and Graph Editors works. Previously, it required you to always select the F-Curves to paste the keyframes into before allowing you to paste keyframes. This was because it is quite difficult to infer which ID-block's set of curves is intended if more than one ID-block has similar curves (e.g. a scene with two materials, and both have their diffuse color animated). The underlying assumption and intention of the feature here was that the copy+paste were only being used by animators to copy animation between similar curves, to transfer and offset animation across block boundaries. However, it turns out that many people were by far more familiar with the simpler copy/paste paradigm from everywhere else (i.e. instead of trying to use duplicate to copy keyframes around within their respective F-Curves). Furthermore, in most cases there is only going to be a single character being animated at a time (vs multiple), which means that most of the time the matching problem is much simpler. Hence, the Paste now works as follows: - If there are selected F-Curves, we limit the paste-matching to only consider those in the selected F-Curves. This makes it possible to still explicitly specify where to paste. - In the more general case (no prior selections), pasting will try to match anything relevant it finds. TODO: - Check on whether the strictest matching level needs adjustments to limit the number of false positives - Testing and feedback of the new behaviour needed <--- ANIMATORS! PLEASE TEST
Diffstat (limited to 'source/blender/editors/space_action')
-rw-r--r--source/blender/editors/space_action/action_edit.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/source/blender/editors/space_action/action_edit.c b/source/blender/editors/space_action/action_edit.c
index 73c36fd8086..0c32ebe549d 100644
--- a/source/blender/editors/space_action/action_edit.c
+++ b/source/blender/editors/space_action/action_edit.c
@@ -445,9 +445,16 @@ static short paste_action_keys(bAnimContext *ac,
ListBase anim_data = {NULL, NULL};
int filter, ok = 0;
- /* filter data */
- filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_SEL | ANIMFILTER_FOREDIT /*| ANIMFILTER_CURVESONLY*/ | ANIMFILTER_NODUPLIS);
- ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);
+ /* filter data
+ * - First time we try to filter more strictly, allowing only selected channels
+ * to allow copying animation between channels
+ * - Second time, we loosen things up if nothing was found the first time, allowing
+ * users to just paste keyframes back into the original curve again [#31670]
+ */
+ filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_FOREDIT /*| ANIMFILTER_CURVESONLY*/ | ANIMFILTER_NODUPLIS);
+
+ if (ANIM_animdata_filter(ac, &anim_data, filter | ANIMFILTER_SEL, ac->data, ac->datatype) == 0)
+ ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);
/* paste keyframes */
ok = paste_animedit_keys(ac, &anim_data, offset_mode, merge_mode);