[Bf-committers] [Bf-blender-cvs] SVN commit: /data/svn/bf-blender [59757] trunk/blender/source/blender: Tweaks to New Driver creation behaviour

Daniel Salazar - 3Developer.com zanqdo at gmail.com
Tue Sep 3 02:37:45 CEST 2013


Humn, I really wish drivers didn't create anything. The vast majority
of drivers do not use mapping other than 1-1 (in my experience). I'd
prefer an easy way to add 1-1 curve when the user wants to instead of
doing stuff the user never asked for!

cheers
Daniel Salazar
patazstudio.com


On Mon, Sep 2, 2013 at 6:28 PM, Joshua Leung <aligorith at gmail.com> wrote:
> Revision: 59757
>           http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=59757
> Author:   aligorith
> Date:     2013-09-03 00:28:23 +0000 (Tue, 03 Sep 2013)
> Log Message:
> -----------
> Tweaks to New Driver creation behaviour
>
> * 'Show Debug' now enabled for all newly created drivers. For most users, it is
> useful to be able to see this to help figure out what's going on
>
> * Removed failed experiment of creating new drivers with Generator FModifiers. I
> had hoped that this would make it easier to create drivers that doubled or
> halved the input values, but that has proved to not be the case, and instead
> made harder for most users to set things up (as they'd have to remove these
> first).
>
> Now, when adding drivers from the UI, these get created with two keyframes (at
> (0,0) and (1,1) for a 1-1 mapping), which can be easily tweaked normally.
>
> However, for backwards compatability of scripts (notably rigify, and perhaps
> some others out there), when creating drivers from scripts, they will still get
> created with Generator FModifiers for now. We can review this situation again
> for 2.7, but for now it seems ok.
>
> Modified Paths:
> --------------
>     trunk/blender/source/blender/editors/animation/drivers.c
>     trunk/blender/source/blender/editors/animation/keyframing.c
>     trunk/blender/source/blender/editors/include/ED_keyframing.h
>     trunk/blender/source/blender/python/intern/bpy_rna_anim.c
>
> Modified: trunk/blender/source/blender/editors/animation/drivers.c
> ===================================================================
> --- trunk/blender/source/blender/editors/animation/drivers.c    2013-09-02 23:32:21 UTC (rev 59756)
> +++ trunk/blender/source/blender/editors/animation/drivers.c    2013-09-03 00:28:23 UTC (rev 59757)
> @@ -75,7 +75,8 @@
>   * for the given Animation Data block. This assumes that all the destinations are valid.
>   *
>   *     - add:  0 - don't add anything if not found,
> - *                     1 - add new Driver FCurve,
> + *                     1 - add new Driver FCurve (with keyframes for visual tweaking),
> + *                     2 - add new Driver FCurve (with generator, for script backwards compatability)
>   *                     -1 - add new Driver FCurve without driver stuff (for pasting)
>   */
>  FCurve *verify_driver_fcurve(ID *id, const char rna_path[], const int array_index, short add)
> @@ -114,11 +115,38 @@
>
>                 /* if add is negative, don't init this data yet, since it will be filled in by the pasted driver */
>                 if (add > 0) {
> +                       BezTriple *bezt;
> +                       size_t i;
> +
>                         /* add some new driver data */
>                         fcu->driver = MEM_callocN(sizeof(ChannelDriver), "ChannelDriver");
> +                       fcu->driver->flag |= DRIVER_FLAG_SHOWDEBUG;
>
> -                       /* add simple generator modifier for driver so that there is some visible representation */
> -                       add_fmodifier(&fcu->modifiers, FMODIFIER_TYPE_GENERATOR);
> +                       /* F-Modifier or Keyframes? */
> +                       // FIXME: replace these magic numbers with defines
> +                       if (add == 2) {
> +                               /* Python API Backwards compatability hack:
> +                                * Create FModifier so that old scripts won't break
> +                                * for now before 2.7 series -- (September 4, 2013)
> +                                */
> +                               add_fmodifier(&fcu->modifiers, FMODIFIER_TYPE_GENERATOR);
> +                       }
> +                       else {
> +                               /* add 2 keyframes so that user has something to work with
> +                                * - These are configured to 0,0 and 1,1 to give a 1-1 mapping
> +                                *   which can be easily tweaked from there.
> +                                */
> +                               insert_vert_fcurve(fcu, 0.0f, 0.0f, INSERTKEY_FAST);
> +                               insert_vert_fcurve(fcu, 1.0f, 1.0f, INSERTKEY_FAST);
> +
> +                               /* configure this curve to extrapolate */
> +                               for (i = 0, bezt = fcu->bezt;  (i < fcu->totvert) && bezt;  i++, bezt++) {
> +                                       bezt->h1 = bezt->h2 = HD_VECT;
> +                               }
> +
> +                               fcu->extend = FCURVE_EXTRAPOLATE_LINEAR;
> +                               calchandles_fcurve(fcu);
> +                       }
>                 }
>
>                 /* just add F-Curve to end of driver list */
> @@ -166,8 +194,10 @@
>
>         /* will only loop once unless the array index was -1 */
>         for (; array_index < array_index_max; array_index++) {
> +               short add_mode = (flag & CREATEDRIVER_WITH_FMODIFIER) ? 2 : 1;
> +
>                 /* create F-Curve with Driver */
> -               fcu = verify_driver_fcurve(id, rna_path, array_index, 1);
> +               fcu = verify_driver_fcurve(id, rna_path, array_index, add_mode);
>
>                 if (fcu && fcu->driver) {
>                         ChannelDriver *driver = fcu->driver;
>
> Modified: trunk/blender/source/blender/editors/animation/keyframing.c
> ===================================================================
> --- trunk/blender/source/blender/editors/animation/keyframing.c 2013-09-02 23:32:21 UTC (rev 59756)
> +++ trunk/blender/source/blender/editors/animation/keyframing.c 2013-09-03 00:28:23 UTC (rev 59757)
> @@ -256,7 +256,7 @@
>                                 dst->f1 = bezt->f1;
>                                 dst->f2 = bezt->f2;
>                                 dst->f3 = bezt->f3;
> -
> +
>                                 /* TODO: perform some other operations? */
>                         }
>                 }
>
> Modified: trunk/blender/source/blender/editors/include/ED_keyframing.h
> ===================================================================
> --- trunk/blender/source/blender/editors/include/ED_keyframing.h        2013-09-02 23:32:21 UTC (rev 59756)
> +++ trunk/blender/source/blender/editors/include/ED_keyframing.h        2013-09-03 00:28:23 UTC (rev 59757)
> @@ -222,6 +222,7 @@
>  /* Flags for use by driver creation calls */
>  typedef enum eCreateDriverFlags {
>         CREATEDRIVER_WITH_DEFAULT_DVAR  = (1 << 0),   /* create drivers with a default variable for nicer UI */
> +       CREATEDRIVER_WITH_FMODIFIER     = (1 << 1),   /* create drivers with Generator FModifier (for backwards compat) */
>  } eCreateDriverFlags;
>
>  /* -------- */
>
> Modified: trunk/blender/source/blender/python/intern/bpy_rna_anim.c
> ===================================================================
> --- trunk/blender/source/blender/python/intern/bpy_rna_anim.c   2013-09-02 23:32:21 UTC (rev 59756)
> +++ trunk/blender/source/blender/python/intern/bpy_rna_anim.c   2013-09-03 00:28:23 UTC (rev 59757)
> @@ -312,7 +312,8 @@
>
>                 BKE_reports_init(&reports, RPT_STORE);
>
> -               result = ANIM_add_driver(&reports, (ID *)self->ptr.id.data, path_full, index, 0, DRIVER_TYPE_PYTHON);
> +               result = ANIM_add_driver(&reports, (ID *)self->ptr.id.data, path_full, index,
> +                                        CREATEDRIVER_WITH_FMODIFIER, DRIVER_TYPE_PYTHON);
>
>                 if (BPy_reports_to_error(&reports, PyExc_RuntimeError, true) == -1)
>                         return NULL;
>
> _______________________________________________
> Bf-blender-cvs mailing list
> Bf-blender-cvs at blender.org
> http://lists.blender.org/mailman/listinfo/bf-blender-cvs


More information about the Bf-committers mailing list