[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