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