Drivers UI: Debug Info

Feature request for ZanQdo, which shows the intermediate values used in driver calculations (i.e. current value of driver, and current value of variables), allowing drivers expressions to be debugged. This is a per-driver setting...
This commit is contained in:
Joshua Leung
2010-01-19 23:38:26 +00:00
parent ccb6e1904a
commit a8855e2caf
5 changed files with 46 additions and 8 deletions

View File

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

View File

@@ -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 */

View File

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

View File

@@ -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 -------------------------------------- */

View File

@@ -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);
}