Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoshua Leung <aligorith@gmail.com>2010-01-20 02:38:26 +0300
committerJoshua Leung <aligorith@gmail.com>2010-01-20 02:38:26 +0300
commita8855e2cafafe2acc14f532625cb0dff1815a0f7 (patch)
treeca9904c34c1b154e311703183d8584e8c6d4807f /source/blender
parentccb6e1904abf358c0f999019ffd62d407ecc920b (diff)
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...
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/blenkernel/intern/fcurve.c9
-rw-r--r--source/blender/editors/space_graph/graph_buttons.c30
-rw-r--r--source/blender/editors/transform/transform_conversions.c1
-rw-r--r--source/blender/makesdna/DNA_anim_types.h9
-rw-r--r--source/blender/makesrna/intern/rna_fcurve.c5
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);
}