[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [24540] trunk/blender/source/blender: Driver Editing Tweaks:

Joshua Leung aligorith at gmail.com
Fri Nov 13 02:04:01 CET 2009


Revision: 24540
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24540
Author:   aligorith
Date:     2009-11-13 02:04:01 +0100 (Fri, 13 Nov 2009)

Log Message:
-----------
Driver Editing Tweaks:
* Updating dependencies for drivers now clears the disabled status of the relevant Driver FCurve too
* Changing the type of ID-block used for Driver Targets and Keying Set Paths will now clear the pointer to the ID-block if it is of the wrong type.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/fcurve.c
    trunk/blender/source/blender/editors/space_graph/graph_buttons.c
    trunk/blender/source/blender/makesrna/intern/rna_animation.c
    trunk/blender/source/blender/makesrna/intern/rna_fcurve.c

Modified: trunk/blender/source/blender/blenkernel/intern/fcurve.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/fcurve.c	2009-11-12 23:27:33 UTC (rev 24539)
+++ trunk/blender/source/blender/blenkernel/intern/fcurve.c	2009-11-13 01:04:01 UTC (rev 24540)
@@ -801,8 +801,13 @@
 				break;
 		}
 	}
-	else if (G.f & G_DEBUG)
-		printf("Driver Evaluation Error: cannot resolve target for %s -> %s \n", id->name, path);
+	else {
+		if (G.f & G_DEBUG)
+			printf("Driver Evaluation Error: cannot resolve target for %s -> %s \n", id->name, path);
+		
+		driver->flag |= DRIVER_FLAG_INVALID;
+		return 0.0f;
+	}
 	
 	return value;
 }
@@ -924,8 +929,8 @@
 			}			
 			
 			/* use the final posed locations */
-			mat4_to_quat( q1,pchan->pose_mat);
-			mat4_to_quat( q2,pchan2->pose_mat);
+			mat4_to_quat(q1, pchan->pose_mat);
+			mat4_to_quat(q2, pchan2->pose_mat);
 			
 			invert_qt(q1);
 			mul_qt_qtqt(quat, q1, q2);

Modified: trunk/blender/source/blender/editors/space_graph/graph_buttons.c
===================================================================
--- trunk/blender/source/blender/editors/space_graph/graph_buttons.c	2009-11-12 23:27:33 UTC (rev 24539)
+++ trunk/blender/source/blender/editors/space_graph/graph_buttons.c	2009-11-13 01:04:01 UTC (rev 24540)
@@ -279,6 +279,7 @@
 	ChannelDriver *driver= fcu->driver;
 	
 	/* clear invalid flags */
+	fcu->flag &= ~FCURVE_DISABLED; // XXX?
 	driver->flag &= ~DRIVER_FLAG_INVALID;
 }
 

Modified: trunk/blender/source/blender/makesrna/intern/rna_animation.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_animation.c	2009-11-12 23:27:33 UTC (rev 24539)
+++ trunk/blender/source/blender/makesrna/intern/rna_animation.c	2009-11-13 01:04:01 UTC (rev 24540)
@@ -78,6 +78,16 @@
 	return (ksp->idtype)? PROP_EDITABLE : 0;
 }
 
+static void rna_ksPath_id_type_set(PointerRNA *ptr, int value)
+{
+	KS_Path *data= (KS_Path*)(ptr->data);
+	
+	/* set the driver type, then clear the id-block if the type is invalid */
+	data->idtype= value;
+	if ((data->id) && (GS(data->id->name) != data->idtype))
+		data->id= NULL;
+}
+
 static void rna_ksPath_RnaPath_get(PointerRNA *ptr, char *value)
 {
 	KS_Path *ksp= (KS_Path *)ptr->data;
@@ -179,6 +189,7 @@
 	RNA_def_property_enum_sdna(prop, NULL, "idtype");
 	RNA_def_property_enum_items(prop, id_type_items);
 	RNA_def_property_enum_default(prop, ID_OB);
+	RNA_def_property_enum_funcs(prop, NULL, "rna_ksPath_id_type_set", NULL);
 	RNA_def_property_ui_text(prop, "ID Type", "Type of ID-block that can be used.");
 	
 	/* Group */

Modified: trunk/blender/source/blender/makesrna/intern/rna_fcurve.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_fcurve.c	2009-11-12 23:27:33 UTC (rev 24539)
+++ trunk/blender/source/blender/makesrna/intern/rna_fcurve.c	2009-11-13 01:04:01 UTC (rev 24540)
@@ -111,6 +111,16 @@
 	return (dtar->idtype)? PROP_EDITABLE : 0;
 }
 
+static void rna_DriverTarget_id_type_set(PointerRNA *ptr, int value)
+{
+	DriverTarget *data= (DriverTarget*)(ptr->data);
+	
+	/* set the driver type, then clear the id-block if the type is invalid */
+	data->idtype= value;
+	if ((data->id) && (GS(data->id->name) != data->idtype))
+		data->id= NULL;
+}
+
 static void rna_DriverTarget_RnaPath_get(PointerRNA *ptr, char *value)
 {
 	DriverTarget *dtar= (DriverTarget *)ptr->data;
@@ -568,6 +578,7 @@
 	RNA_def_property_enum_sdna(prop, NULL, "idtype");
 	RNA_def_property_enum_items(prop, id_type_items);
 	RNA_def_property_enum_default(prop, ID_OB);
+	RNA_def_property_enum_funcs(prop, NULL, "rna_DriverTarget_id_type_set", NULL);
 	RNA_def_property_ui_text(prop, "ID Type", "Type of ID-block that can be used.");
 	//RNA_def_property_update(prop, 0, "rna_ChannelDriver_update_data"); // XXX disabled for now, until we can turn off auto updates
 	





More information about the Bf-blender-cvs mailing list