Bugfix #21856: Empty F-Curves created when keyframing with 'auto keyframing mode...
authorJoshua Leung <aligorith@gmail.com>
Mon, 5 Apr 2010 12:17:33 +0000 (12:17 +0000)
committerJoshua Leung <aligorith@gmail.com>
Mon, 5 Apr 2010 12:17:33 +0000 (12:17 +0000)
Now, when the mode is 'replace', no F-Curves are created during keyframing (i.e. only existing F-Curves are used).

---

Also, fixed missing line in previous commit for Select Linked.

source/blender/editors/animation/keyframing.c
source/blender/editors/space_action/action_ops.c

index 02b797709412d9251ea7a7e553d6b403c261b637..669a1042998e760e7f53f368eae775d29009068c 100644 (file)
@@ -871,21 +871,27 @@ short insert_keyframe (ID *id, bAction *act, const char group[], const char rna_
        
        /* will only loop once unless the array index was -1 */
        for (; array_index < array_index_max; array_index++) {
-               /* make sure the F-Curve exists */
-               fcu= verify_fcurve(act, group, rna_path, array_index, 1);
+               /* make sure the F-Curve exists 
+                *      - if we're replacing keyframes only, DO NOT create new F-Curves if they do not exist yet
+                *        but still try to get the F-Curve if it exists...
+                */
+               fcu= verify_fcurve(act, group, rna_path, array_index, (flag & INSERTKEY_REPLACE)==0);
                
-               /* set color mode if the F-Curve is new (i.e. without any keyframes) */
-               if ((fcu->totvert == 0) && (flag & INSERTKEY_XYZ2RGB)) {
-                       /* for Loc/Rot/Scale and also Color F-Curves, the color of the F-Curve in the Graph Editor,
-                        * is determined by the array index for the F-Curve
-                        */
-                       if (ELEM4(RNA_property_subtype(prop), PROP_TRANSLATION, PROP_XYZ, PROP_EULER, PROP_COLOR)) {
-                               fcu->color_mode= FCURVE_COLOR_AUTO_RGB;
+               /* we may not have a F-Curve when we're replacing only... */
+               if (fcu) {
+                       /* set color mode if the F-Curve is new (i.e. without any keyframes) */
+                       if ((fcu->totvert == 0) && (flag & INSERTKEY_XYZ2RGB)) {
+                               /* for Loc/Rot/Scale and also Color F-Curves, the color of the F-Curve in the Graph Editor,
+                                * is determined by the array index for the F-Curve
+                                */
+                               if (ELEM4(RNA_property_subtype(prop), PROP_TRANSLATION, PROP_XYZ, PROP_EULER, PROP_COLOR)) {
+                                       fcu->color_mode= FCURVE_COLOR_AUTO_RGB;
+                               }
                        }
+                       
+                       /* insert keyframe */
+                       ret += insert_keyframe_direct(ptr, prop, fcu, cfra, flag);
                }
-               
-               /* insert keyframe */
-               ret += insert_keyframe_direct(ptr, prop, fcu, cfra, flag);
        }
        
        return ret;
index 8500087c00db24029eec598eebd815d0e59153ac..8ef37942fb3a061cef855bb756457d5a391e2176 100644 (file)
@@ -58,6 +58,7 @@ void action_operatortypes(void)
        WM_operatortype_append(ACTION_OT_select_all_toggle);
        WM_operatortype_append(ACTION_OT_select_border);
        WM_operatortype_append(ACTION_OT_select_column);
+       WM_operatortype_append(ACTION_OT_select_linked);
        WM_operatortype_append(ACTION_OT_select_more);
        WM_operatortype_append(ACTION_OT_select_less);