The module SoCalculator calculates by evaluating expressions (with access to input/output fields) and writing the result to the output fields.


The SoCalculator has 7 input float fields named a-g and 7 input vectors named va-vg. It has 4 output float fields named oa-ad and 4 output vectors named ova-ovd.

The expression input string specifies the expression to be evaluated. An expression can consist of multiple subexpressions. Several subexpressions can be specified in one string, separated by semicolons (;) (newline characters are filtered automatically).

Each subexpression is of the form:

<lhs> = <rhs>

The <lhs> can be any one of the outputs (oa-ad, ova-ovd) or a temporary variable. The engine provides 8 temporary floating-point variables (ta, tb, tc, td, te, tf, tg, and th), and 8 temporary vector variables (tA, tB, tC, tD, tE, tF, tG, and tH). You can assign a value to one component of a vector output (ova-ovd) or a vector variable (tA-tH) by using the [ ] operator. For example, ova[0] = <rhs>, will evaluate the right hand side and assign the value to the first component of the output vector ova.

The <rhs> supports arithmetic, logical and conditional operators. They are:

(unary)   !, -
(binary)  +, -, *, /, %, <, > <=, >=, ==, !=, &&, ||
(ternary) ? :

The ternary operator is a conditional operator. For example, a ? b : c evaluates to b if a != 0, and to c if a==0.

Valid operands for the <rhs> include the inputs, outputs, temporary variables, and their components (e.g. oA[0]). Operands can also be numeric constants (e.g. 1.0), pre-defined named constants, or pre-defined functions.

The named constants are:

M_SQRT2  = sqrt(2)
M_SQRT1_2 = sqrt(1/2)

Most of the pre-defined functions come from the math library:

cos, sin, tan,
acos, asin, atan, atan2,
cosh, sinh, tanh,
sqrt, pow, exp, log, log10,
ceil, floor, fabs, fmod.

Other functions are defined by SoCalculator. They are:

rand(f)           - Random number generator
cross(v1, v2)     - Vector cross product
dot(v1, v2)       - Vector dot product
length(v)         - Vector length
normalize(v)      - Normalize vector
vec3f(f1, f2, f3) - Generate a vector from 3 floats

The subexpressions are evaluated in order, so a variable set in the <lhs> of an earlier expression may be used in the <rhs> of a later expression. Comments can be inserted with #.


Default Panel


Parameter Fields

Hidden Fields


name: h, type: Float, default: 0


name: vh, type: Vector3, default: 0 0 0