From fea2665479fcc34e4f8c16f8f603af714ea4abc5 Mon Sep 17 00:00:00 2001 From: Tim Redfern Date: Fri, 24 Jan 2014 10:39:37 +0000 Subject: clamp mosaic pixels --- rotord/src/nodes_maths.h | 108 +++++++++++++++++++++-------------------------- 1 file changed, 48 insertions(+), 60 deletions(-) (limited to 'rotord/src/nodes_maths.h') diff --git a/rotord/src/nodes_maths.h b/rotord/src/nodes_maths.h index ce474cf..6bbccdc 100644 --- a/rotord/src/nodes_maths.h +++ b/rotord/src/nodes_maths.h @@ -90,67 +90,55 @@ namespace Rotor { } Arithmetic* clone(map &_settings) { return new Arithmetic(_settings);}; const double output(const Time_spec &time) { - //if (attributes["operator"]->intVal==ARITHMETIC_divide||attributes["operator"]->intVal==ARITHMETIC_modulo){ - // if (value==0.0) { - // Poco::Logger& logger = Poco::Logger::get("Rotor"); - // logger.error("Arithmetic node: caught division by zero, frame "+time.frame()); - // return 0.0; - // } - //} - if (inputs.size()) { //there should there be a way to specify number of inputs in the code rather than in xml - if (inputs[0]->connection) { - double in= inputs[0]->get(time); - int inint; //this old chestnut - switch (attributes["operator"]->intVal) { - case ARITHMETIC_plus: - return in+parameters["value"]->value; - break; - case ARITHMETIC_minus: - return in-parameters["value"]->value; - break; - case ARITHMETIC_multiply: - return in*parameters["value"]->value; - break; - case ARITHMETIC_divide: - return in/parameters["value"]->value; - break; - case ARITHMETIC_modulo: - //cerr <value<<" = "<value)<value); - //return (((int)in)%12); //+(in-((int)in)); - break; - case ARITHMETIC_pow: - return pow(in,parameters["value"]->value); - break; - case ARITHMETIC_sin: - phase+=(in-inputs[0]->get(time.lastframe()))*parameters["frequency"]->value; - return sin(phase)*parameters["value"]->value; - break; - case ARITHMETIC_cos: - phase+=(in-inputs[0]->get(time.lastframe()))*parameters["frequency"]->value; - return cos(phase)*parameters["value"]->value; - break; - case ARITHMETIC_ease: - return ((1.0-parameters["value"]->value)*in)+(parameters["value"]->value*(0.5f+((cos((fmod(in,1.0)+1.0)*M_PI))*0.5f))); - break; - case ARITHMETIC_jolt: - return ((1.0-parameters["value"]->value)*in)+(parameters["value"]->value*(0.5f+((sin((fmod(in,1.0)+1.0)*M_PI))*0.5f))); - break; - case ARITHMETIC_floor: - return floor(in); - break; - case ARITHMETIC_2pow: - return pow(2,in); - break; - case ARITHMETIC_reciprocal: - return parameters["value"]->value/in; - break; - case ARITHMETIC_rminus: - return parameters["value"]->value-in; - break; - } + if (inputs[0]->connection) { + double in= inputs[0]->get(time); + switch (attributes["operator"]->intVal) { + case ARITHMETIC_plus: + return in+parameters["value"]->value; + break; + case ARITHMETIC_minus: + return in-parameters["value"]->value; + break; + case ARITHMETIC_multiply: + return in*parameters["value"]->value; + break; + case ARITHMETIC_divide: + return in/parameters["value"]->value; + break; + case ARITHMETIC_modulo: + return fmod(in,parameters["value"]->value); + break; + case ARITHMETIC_pow: + return pow(in,parameters["value"]->value); + break; + case ARITHMETIC_sin: + phase+=(in-inputs[0]->get(time.lastframe()))*parameters["frequency"]->value; + return sin(phase)*parameters["value"]->value; + break; + case ARITHMETIC_cos: + phase+=(in-inputs[0]->get(time.lastframe()))*parameters["frequency"]->value; + return cos(phase)*parameters["value"]->value; + break; + case ARITHMETIC_ease: + return ((1.0-parameters["value"]->value)*in)+(parameters["value"]->value*(0.5f+((cos((fmod(in,1.0)+1.0)*M_PI))*0.5f))); + break; + case ARITHMETIC_jolt: + return ((1.0-parameters["value"]->value)*in)+(parameters["value"]->value*(0.5f+((sin((fmod(in,1.0)+1.0)*M_PI))*0.5f))); + break; + case ARITHMETIC_floor: + return floor(in); + break; + case ARITHMETIC_2pow: + return pow(2,in); + break; + case ARITHMETIC_reciprocal: + return parameters["value"]->value/in; + break; + case ARITHMETIC_rminus: + return parameters["value"]->value-in; + break; } - } + } return 0.0; } int op; -- cgit v1.2.3