driver type 'Sum'

This commit is contained in:
Campbell Barton
2009-12-07 19:59:04 +00:00
parent 987e9bc172
commit 47416c725c
3 changed files with 12 additions and 5 deletions

View File

@@ -910,6 +910,7 @@ static float evaluate_driver (ChannelDriver *driver, float evaltime)
// TODO: the flags for individual targets need to be used too for more fine-grained support...
switch (driver->type) {
case DRIVER_TYPE_AVERAGE: /* average values of driver targets */
case DRIVER_TYPE_SUM: /* sum values of driver targets */
{
/* check how many targets there are first (i.e. just one?) */
if (driver->targets.first == driver->targets.last) {
@@ -921,19 +922,22 @@ static float evaluate_driver (ChannelDriver *driver, float evaltime)
/* more than one target, so average the values of the targets */
int tot = 0;
float value = 0.0f;
/* loop through targets, adding (hopefully we don't get any overflow!) */
for (dtar= driver->targets.first; dtar; dtar=dtar->next) {
value += driver_get_target_value(driver, dtar);
value += driver_get_target_value(driver, dtar);
tot++;
}
/* return the average of these */
return (value / (float)tot);
if(driver->type == DRIVER_TYPE_AVERAGE)
return (value / (float)tot);
else
return value;
}
}
break;
case DRIVER_TYPE_PYTHON: /* expression */
{
#ifndef DISABLE_PYTHON

View File

@@ -309,6 +309,8 @@ typedef enum eDriver_Types {
DRIVER_TYPE_PYTHON,
/* rotational difference (must use rotation channels only) */
DRIVER_TYPE_ROTDIFF,
/* sum of all values */
DRIVER_TYPE_SUM,
} eDriver_Types;
/* driver flags */

View File

@@ -789,6 +789,7 @@ static void rna_def_channeldriver(BlenderRNA *brna)
static EnumPropertyItem prop_type_items[] = {
{DRIVER_TYPE_AVERAGE, "AVERAGE", 0, "Averaged Value", ""},
{DRIVER_TYPE_SUM, "SUM", 0, "Sum Values", ""},
{DRIVER_TYPE_PYTHON, "SCRIPTED", 0, "Scripted Expression", ""},
{DRIVER_TYPE_ROTDIFF, "ROTDIFF", 0, "Rotational Difference", ""},
{0, NULL, 0, NULL, NULL}};