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

Joshua Leung aligorith at gmail.com
Tue Sep 3 02:28:23 CEST 2013


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;




More information about the Bf-blender-cvs mailing list