[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [18707] branches/blender2.5/blender/source /blender: Animato - Driver + ShapeKey bugfixes

Joshua Leung aligorith at gmail.com
Wed Jan 28 01:50:59 CET 2009


Revision: 18707
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18707
Author:   aligorith
Date:     2009-01-28 01:50:56 +0100 (Wed, 28 Jan 2009)

Log Message:
-----------
Animato - Driver + ShapeKey bugfixes

* ShapeKey conversions should now go to the correct places
* Added fix for drivers to prevent crashes when no driver object is provided (Franky from BBB seems to have one such driver for some reason).
* Temporarily disabled a check when evaluating drivers for whether the driver is tagged for evaluation. Drivers still need to be correctly tagged AND ordered by the Depsgraph to work correctly.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenkernel/intern/anim_sys.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/fcurve.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/ipo.c
    branches/blender2.5/blender/source/blender/editors/animation/anim_channels.c
    branches/blender2.5/blender/source/blender/editors/include/ED_anim_api.h
    branches/blender2.5/blender/source/blender/editors/space_ipo/ipo_draw.c
    branches/blender2.5/blender/source/blender/editors/space_ipo/ipo_ops.c
    branches/blender2.5/blender/source/blender/editors/transform/transform_ops.c
    branches/blender2.5/blender/source/blender/makesdna/DNA_action_types.h

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/anim_sys.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/anim_sys.c	2009-01-28 00:43:46 UTC (rev 18706)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/anim_sys.c	2009-01-28 00:50:56 UTC (rev 18707)
@@ -229,7 +229,9 @@
 	}
 	else {
 		/* failed to get path */
-		printf("Animato: Invalid path '%s[%d]' \n", path, array_index);
+		printf("Animato: Invalid path. ID = '%s',  '%s [%d]' \n", 
+			(ptr && ptr->id.data) ? (((ID *)ptr->id.data)->name+2) : "<No ID>", 
+			path, array_index);
 		return 0;
 	}
 }
@@ -291,7 +293,7 @@
 		if ((fcu->flag & (FCURVE_MUTED|FCURVE_DISABLED)) == 0) 
 		{
 			/* check if driver itself is tagged for recalculation */
-			if ((driver) && (driver->flag & DRIVER_FLAG_RECALC)) {
+			if ((driver) /*&& (driver->flag & DRIVER_FLAG_RECALC)*/) {	// XXX driver recalc flag is not set yet by depsgraph!
 				/* evaluate this using values set already in other places */
 				// NOTE: for 'layering' option later on, we should check if we should remove old value before adding new to only be done when drivers only changed
 				calculate_fcurve(fcu, ctime);

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/fcurve.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/fcurve.c	2009-01-28 00:43:46 UTC (rev 18706)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/fcurve.c	2009-01-28 00:50:56 UTC (rev 18707)
@@ -447,24 +447,34 @@
 {
 	PointerRNA id_ptr, ptr;
 	PropertyRNA *prop;
+	ID *id;
 	char *path;
 	int index;
 	float value= 0.0f;
 	
 	/* get RNA-pointer for the ID-block given in driver */
-	if (target == 2) {
+	if (target == 1) {
 		/* second target */
 		RNA_id_pointer_create(driver->id2, &id_ptr);
+		id= driver->id2;
 		path= driver->rna_path2;
 		index= driver->array_index2;
 	}
 	else {
 		/* first/main target */
 		RNA_id_pointer_create(driver->id, &id_ptr);
+		id= driver->id;
 		path= driver->rna_path;
 		index= driver->array_index;
 	}
 	
+	/* error check for missing pointer... */
+	if (id == NULL) {
+		printf("Error: driver doesn't have any valid target to use \n");
+		driver->flag |= DRIVER_FLAG_INVALID;
+		return 0.0f;
+	}
+	
 	/* get property to read from, and get value as appropriate */
 	if (RNA_path_resolve(&id_ptr, path, &ptr, &prop)) {
 		switch (RNA_property_type(&ptr, prop)) {
@@ -511,9 +521,10 @@
 		case DRIVER_TYPE_CHANNEL: /* channel/setting drivers channel/setting */
 			return driver_get_driver_value(driver, 0);
 			
-#ifndef DISABLE_PYTHON
+
 		case DRIVER_TYPE_PYTHON: /* expression */
 		{
+#ifndef DISABLE_PYTHON
 			/* check for empty or invalid expression */
 			if ( (driver->expression[0] == '\0') ||
 				 (driver->flag & DRIVER_FLAG_INVALID) )
@@ -526,8 +537,10 @@
 			 */
 			//return BPY_pydriver_eval(driver); // XXX old func
 			return 1.0f;
+#endif /* DISABLE_PYTHON*/
 		}
-#endif /* DISABLE_PYTHON*/
+			break;
+
 		
 		case DRIVER_TYPE_ROTDIFF: /* difference of rotations of 2 bones (should be in same armature) */
 		{

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/ipo.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/ipo.c	2009-01-28 00:43:46 UTC (rev 18706)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/ipo.c	2009-01-28 00:50:56 UTC (rev 18707)
@@ -277,7 +277,10 @@
 	
 	/* block will be attached to ID_KE block, and setting that we alter is the 'value' (which sets keyblock.curval) */
 	// XXX adrcode 0 was dummy 'speed' curve 
-	sprintf(buf, "keys[%d].value", adrcode-1); // XXX this doesn't seem too safe...
+	if (adrcode == 0) 
+		sprintf(buf, "speed");
+	else
+		sprintf(buf, "keys[%d].value", adrcode);
 	return buf;
 }
 
@@ -710,6 +713,7 @@
 		if (idriver->blocktype == ID_AR) {
 			/* ID_PO */
 			if (idriver->adrcode == OB_ROT_DIFF) {
+				printf("idriver_to_cdriver - rotdiff %p \n", idriver->ob);
 				/* Rotational Difference is a special type of driver now... */
 				cdriver->type= DRIVER_TYPE_ROTDIFF;
 				
@@ -727,6 +731,7 @@
 				cdriver->rna_path2= get_rna_access(-1, -1, idriver->name+DRIVER_NAME_OFFS, NULL, NULL);
 			}
 			else {
+				printf("idriver_to_cdriver - arm  %p \n", idriver->ob);
 				/* 'standard' driver */
 				cdriver->type= DRIVER_TYPE_CHANNEL;
 				cdriver->id= (ID *)idriver->ob;
@@ -767,12 +772,15 @@
 		}
 		else {
 			/* ID_OB */
+			printf("idriver_to_cdriver  - ob %p \n", idriver->ob);
 			cdriver->type= DRIVER_TYPE_CHANNEL;
 			cdriver->id= (ID *)idriver->ob;
-			cdriver->rna_path= get_rna_access(ID_OB, idriver->adrcode, idriver->name, NULL, &cdriver->array_index);
+			cdriver->rna_path= get_rna_access(ID_OB, idriver->adrcode, NULL, NULL, &cdriver->array_index);
 		}
 	}
 	
+	printf("\tcdriver -> id = %p \n", cdriver->id);
+	
 	/* free old driver */
 	MEM_freeN(idriver);
 	
@@ -945,11 +953,14 @@
 				adt->action= add_empty_action("ConvertedAction"); // XXX we need a better name for this...
 				printf("added new action \n");
 			}
+			printf("\ticu to action fcurve (%p %d) -> (%p %s %d)  \n", icu, icu->adrcode, fcu, fcu->rna_path, fcu->array_index);	
 				
 			/* add F-Curve to action */
 			BLI_addtail(&adt->action->curves, fcu);
 		}
 		else {
+			printf("\ticu to driver fcurve (%p %d) -> (%p %s %d) \n", icu, icu->adrcode, fcu, fcu->rna_path, fcu->array_index);	
+			
 			/* add F-Curve to AnimData's drivers */
 			BLI_addtail(&adt->drivers, fcu);
 		}

Modified: branches/blender2.5/blender/source/blender/editors/animation/anim_channels.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/animation/anim_channels.c	2009-01-28 00:43:46 UTC (rev 18706)
+++ branches/blender2.5/blender/source/blender/editors/animation/anim_channels.c	2009-01-28 00:50:56 UTC (rev 18707)
@@ -1025,7 +1025,7 @@
 		case ANIMTYPE_FILLACTD:
 		{
 			bAction *act= (bAction *)ale->data;
-			act->flag ^= ACT_EXPANDED;
+			act->flag ^= ACT_COLLAPSED;
 		}
 			break;
 		case ANIMTYPE_FILLMATD:

Modified: branches/blender2.5/blender/source/blender/editors/include/ED_anim_api.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/ED_anim_api.h	2009-01-28 00:43:46 UTC (rev 18706)
+++ branches/blender2.5/blender/source/blender/editors/include/ED_anim_api.h	2009-01-28 00:50:56 UTC (rev 18707)
@@ -170,7 +170,7 @@
 #define FILTER_CUR_OBJD(cu) ((cu->flag & CU_DS_EXPAND))
 	/* 'Sub-object/Action' channels (flags stored in Action) */
 #define SEL_ACTC(actc) ((actc->flag & ACT_SELECTED))
-#define EXPANDED_ACTC(actc) ((actc->flag & ACT_EXPANDED))
+#define EXPANDED_ACTC(actc) ((actc->flag & ACT_COLLAPSED)==0)
 
 /* Actions (also used for Dopesheet) */
 	/* Action Channel Group */

Modified: branches/blender2.5/blender/source/blender/editors/space_ipo/ipo_draw.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_ipo/ipo_draw.c	2009-01-28 00:43:46 UTC (rev 18706)
+++ branches/blender2.5/blender/source/blender/editors/space_ipo/ipo_draw.c	2009-01-28 00:50:56 UTC (rev 18707)
@@ -653,8 +653,8 @@
 	int filter;
 	
 	View2D *v2d= &ar->v2d;
-	float x= 0.0f, y= 0.0f;
-	int items, height;
+	float x= 0.0f, y= 0.0f, height;
+	int items;
 	
 	/* build list of channels to draw */
 	filter= (ANIMFILTER_VISIBLE|ANIMFILTER_CHANNELS);

Modified: branches/blender2.5/blender/source/blender/editors/space_ipo/ipo_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_ipo/ipo_ops.c	2009-01-28 00:43:46 UTC (rev 18706)
+++ branches/blender2.5/blender/source/blender/editors/space_ipo/ipo_ops.c	2009-01-28 00:50:56 UTC (rev 18707)
@@ -108,6 +108,7 @@
 	RNA_boolean_set(WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_borderselect", BKEY, KM_PRESS, KM_ALT, 0)->ptr, "axis_range", 1);
 	
 		/* column select */
+		// XXX KKEY would be nice to keep for 'keyframe' lines
 	RNA_enum_set(WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_columnselect", KKEY, KM_PRESS, 0, 0)->ptr, "mode", GRAPHKEYS_COLUMNSEL_KEYS);
 	RNA_enum_set(WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_columnselect", KKEY, KM_PRESS, KM_CTRL, 0)->ptr, "mode", GRAPHKEYS_COLUMNSEL_CFRA);
 	RNA_enum_set(WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_columnselect", KKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "mode", GRAPHKEYS_COLUMNSEL_MARKERS_COLUMN);
@@ -144,7 +145,7 @@
 #endif // XXX code to be sanitied for new system	
 		
 	/* transform system */
-	transform_keymap_for_space(wm, keymap, /*SPACE_IPO*/SPACE_ACTION); // xxx
+	transform_keymap_for_space(wm, keymap, SPACE_IPO);
 }
 
 /* --------------- */

Modified: branches/blender2.5/blender/source/blender/editors/transform/transform_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/transform/transform_ops.c	2009-01-28 00:43:46 UTC (rev 18706)
+++ branches/blender2.5/blender/source/blender/editors/transform/transform_ops.c	2009-01-28 00:50:56 UTC (rev 18707)
@@ -274,6 +274,16 @@
 			km= WM_keymap_add_item(keymap, "TFM_OT_transform", TKEY, KM_PRESS, 0, 0);
 			RNA_int_set(km->ptr, "mode", TFM_TIME_SLIDE);
 			break;
+		case SPACE_IPO:
+			km= WM_keymap_add_item(keymap, "TFM_OT_transform", GKEY, KM_PRESS, 0, 0);
+			RNA_int_set(km->ptr, "mode", TFM_TRANSLATION);
+			
+			//km = WM_keymap_add_item(keymap, "TFM_OT_transform", RKEY, KM_PRESS, 0, 0);
+			//RNA_int_set(km->ptr, "mode", TFM_ROTATION);
+			
+			km = WM_keymap_add_item(keymap, "TFM_OT_transform", SKEY, KM_PRESS, 0, 0);
+			RNA_int_set(km->ptr, "mode", TFM_RESIZE);
+			break;
 		case SPACE_NODE:
 			km= WM_keymap_add_item(keymap, "TFM_OT_transform", GKEY, KM_PRESS, 0, 0);
 			RNA_int_set(km->ptr, "mode", TFM_TRANSLATION);

Modified: branches/blender2.5/blender/source/blender/makesdna/DNA_action_types.h
===================================================================
--- branches/blender2.5/blender/source/blender/makesdna/DNA_action_types.h	2009-01-28 00:43:46 UTC (rev 18706)
+++ branches/blender2.5/blender/source/blender/makesdna/DNA_action_types.h	2009-01-28 00:50:56 UTC (rev 18707)
@@ -261,7 +261,7 @@

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list