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. @@

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to