diff options
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/blenkernel/intern/fcurve.c | 9 | ||||
-rw-r--r-- | source/blender/editors/space_graph/graph_buttons.c | 30 | ||||
-rw-r--r-- | source/blender/editors/transform/transform_conversions.c | 1 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_anim_types.h | 9 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_fcurve.c | 5 |
5 files changed, 46 insertions, 8 deletions
diff --git a/source/blender/blenkernel/intern/fcurve.c b/source/blender/blenkernel/intern/fcurve.c index 3ce77c8cb4f..60d670e5f71 100644 --- a/source/blender/blenkernel/intern/fcurve.c +++ b/source/blender/blenkernel/intern/fcurve.c @@ -1237,14 +1237,17 @@ float driver_get_variable_value (ChannelDriver *driver, DriverVar *dvar) return 0.0f; /* call the relevant callbacks to get the variable value - * using the variable type info + * using the variable type info, storing the obtained value + * in dvar->curval so that drivers can be debugged */ dvti= get_dvar_typeinfo(dvar->type); if (dvti && dvti->get_value) - return dvti->get_value(driver, dvar); + dvar->curval= dvti->get_value(driver, dvar); else - return 0.0f; + dvar->curval= 0.0f; + + return dvar->curval; } /* Evaluate an Channel-Driver to get a 'time' value to use instead of "evaltime" diff --git a/source/blender/editors/space_graph/graph_buttons.c b/source/blender/editors/space_graph/graph_buttons.c index 7dfb11a9827..1d6fe6d0b6b 100644 --- a/source/blender/editors/space_graph/graph_buttons.c +++ b/source/blender/editors/space_graph/graph_buttons.c @@ -318,7 +318,7 @@ static void graph_panel_driverVar__singleProp(const bContext *C, uiLayout *layou /* Target ID */ row= uiLayoutRow(layout, 0); - uiTemplateAnyID(row, (bContext *)C, &dtar_ptr, "id", "id_type", "Value:"); + uiTemplateAnyID(row, (bContext *)C, &dtar_ptr, "id", "id_type", "Prop:"); /* Target Property */ // TODO: make this less technical... @@ -490,6 +490,21 @@ static void graph_panel_drivers(const bContext *C, Panel *pa) if (driver->flag & DRIVER_FLAG_INVALID) uiItemL(col, "ERROR: invalid target channel(s)", ICON_ERROR); } + + col= uiLayoutColumn(pa->layout, 1); + /* debug setting */ + uiItemR(col, NULL, 0, &driver_ptr, "show_debug_info", 0); + + /* value of driver */ + if (driver->flag & DRIVER_FLAG_SHOWDEBUG) { + uiLayout *row= uiLayoutRow(col, 1); + char valBuf[32]; + + uiItemL(row, "Driver Value:", 0); + + sprintf(valBuf, "%.3f", driver->curval); + uiItemL(row, valBuf, 0); + } /* add driver variables */ col= uiLayoutColumn(pa->layout, 0); @@ -542,6 +557,19 @@ static void graph_panel_drivers(const bContext *C, Panel *pa) graph_panel_driverVar__transChan(C, box, ale->id, dvar); break; } + + /* value of variable */ + if (driver->flag & DRIVER_FLAG_SHOWDEBUG) { + uiLayout *row; + char valBuf[32]; + + box= uiLayoutBox(col); + row= uiLayoutRow(box, 1); + uiItemL(row, "Value:", 0); + + sprintf(valBuf, "%.3f", dvar->curval); + uiItemL(row, valBuf, 0); + } } /* cleanup */ diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index 8033a340a43..811ebb13592 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -4600,7 +4600,6 @@ void autokeyframe_pose_cb_func(bContext *C, Scene *scene, View3D *v3d, Object *o { ID *id= &ob->id; AnimData *adt= ob->adt; - bArmature *arm= ob->data; bAction *act= (adt) ? adt->action : NULL; bPose *pose= ob->pose; bPoseChannel *pchan; diff --git a/source/blender/makesdna/DNA_anim_types.h b/source/blender/makesdna/DNA_anim_types.h index 958add428a4..d1fa4616cbc 100644 --- a/source/blender/makesdna/DNA_anim_types.h +++ b/source/blender/makesdna/DNA_anim_types.h @@ -294,9 +294,10 @@ typedef struct DriverVar { char name[64]; /* name of the variable to use in py-expression (must be valid python identifier) */ DriverTarget targets[8]; /* MAX_DRIVER_TARGETS, target slots */ - int num_targets; /* number of targets actually used by this variable */ + short num_targets; /* number of targets actually used by this variable */ - int type; /* type of driver target (eDriverTarget_Types) */ + short type; /* type of driver target (eDriverTarget_Types) */ + float curval; /* result of previous evaluation */ } DriverVar; /* Driver Variable Types */ @@ -339,7 +340,7 @@ typedef struct ChannelDriver { char expression[256]; /* expression to compile for evaluation */ void *expr_comp; /* PyObject - compiled expression, dont save this */ - float curval; /* result of previous evaluation, for subtraction from result under certain circumstances */ + float curval; /* result of previous evaluation */ float influence; /* influence of driver on result */ // XXX to be implemented... this is like the constraint influence setting /* general settings */ @@ -374,6 +375,8 @@ typedef enum eDriver_Flags { DRIVER_FLAG_RECOMPILE = (1<<3), /* the names are cached so they dont need have python unicode versions created each time */ DRIVER_FLAG_RENAMEVAR = (1<<4), + /* intermediate values of driver should be shown in the UI for debugging purposes */ + DRIVER_FLAG_SHOWDEBUG = (1<<5), } eDriver_Flags; /* F-Curves -------------------------------------- */ diff --git a/source/blender/makesrna/intern/rna_fcurve.c b/source/blender/makesrna/intern/rna_fcurve.c index b6b05eb4896..7cf5a9708b0 100644 --- a/source/blender/makesrna/intern/rna_fcurve.c +++ b/source/blender/makesrna/intern/rna_fcurve.c @@ -856,6 +856,11 @@ static void rna_def_channeldriver(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Variables", "Properties acting as inputs for this driver."); rna_def_channeldriver_variables(brna, prop); + /* Settings */ + prop= RNA_def_property(srna, "show_debug_info", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", DRIVER_FLAG_SHOWDEBUG); + RNA_def_property_ui_text(prop, "Show Debug Info", "Show intermediate values for the driver calculations to allow debugging of drivers."); + /* Functions */ RNA_api_drivers(srna); } |