SoCalculator(3IV)NAMESoCalculator (SoCalculator) - a general-purpose calculator
INHERITS FROM
SoBase > SoFieldContainer > SoEngine > SoCalculatorSYNOPSIS
#include <Inventor_c/engines/SoCalculator.h>
Inputs from class SoCalculator:
SoMFFloat a
SoMFFloat b
SoMFFloat c
SoMFFloat d
SoMFFloat e
SoMFFloat f
SoMFFloat g
SoMFFloat h
SoMFVec3f A
SoMFVec3f B
SoMFVec3f C
SoMFVec3f D
SoMFVec3f E
SoMFVec3f F
SoMFVec3f G
SoMFVec3f H
SoMFString expression
Outputs from class SoCalculator:
(SoMFFloat) oa
(SoMFFloat) ob
(SoMFFloat) oc
(SoMFFloat) od
(SoMFVec3f) oA
(SoMFVec3f) oB
(SoMFVec3f) oC
(SoMFVec3f) oD
Functions from class SoCalculator:
SoCalculator * SoCalculatorCreate()
Functions from class SoEngine:
SoType SoCalculatorGetTypeId()
int SoCalculatorGetOuts(const SoCalculator *this,
SoEngineOutputList *list)
SoEngineOutput * SoCalculatorGetOut(const SoCalculator *this, const
char *outputName)
Page 1SoCalculator(3IV)
SbBool SoCalculatorGetOutName(const SoCalculator *this,
const SoEngineOutput *output, SbName
*outputName)
SoEngine * SoCalculatorCopy(const SoCalculator *this)
SoEngine * SoCalculatorGetByName(const char *name)
int SoCalculatorGetByNameList(const char *name,
SoEngineList *list)
Functions from class SoFieldContainer:
SoType SoCalculatorGetClassTypeId()
void SoCalculatorSetToDflts(SoCalculator *this)
SbBool SoCalculatorHasDfltVals(const SoCalculator *this)
SbBool SoCalculatorFldsAreEq(const SoCalculator *this, const
SoFieldContainer *fc)
void SoCalculatorCopyFieldVals(SoCalculator *this, const
SoFieldContainer *fc, SbBool copyConnections =
FALSE)
SbBool SoCalculatorSet(SoCalculator *this, const char
*fieldDataString)
void SoCalculatorGet(SoCalculator *this, SbString
*fieldDataString)
int SoCalculatorGetFields(const SoCalculator *this,
SoFieldList *resultList)
SoField * SoCalculatorGetField(const SoCalculator *this, const
char *fieldName)
SbBool SoCalculatorGetFieldName(const SoCalculator *this,
const SoField *field, SbName *fieldName)
SbBool SoCalculatorIsNotifyEnabled(const SoCalculator *this)
SbBool SoCalculatorEnableNotify(SoCalculator *this, SbBool
flag)
Functions from class SoBase:
void SoCalculatorRef(SoCalculator *this)
void SoCalculatorUnref(const SoCalculator *this)
void SoCalculatorUnrefNoDelete(const SoCalculator *this)
void SoCalculatorTouch(SoCalculator *this)
SbBool SoCalculatorIsOfType(const SoCalculator *this, SoType
type)
void SoCalculatorSetName(SoCalculator *this, const char
*name)
SbName SoCalculatorGetName(const SoCalculator *this)
DESCRIPTION
This engine is a general-purpose calculator. The calculator operates on
floating-point values and 3D floating-point vectors. The engine takes up
to eight inputs of each type (SoMFloat and SoMV3f), and produces up to
four outputs of each type.
Each input field (a-h, A-H) can have multiple values, allowing the engine
Page 2SoCalculator(3IV)
to evaluate the expression with different values in parallel. Some inputs
may have more values than others. In such cases, the last value of the
shorter inputs will be repeated as necessary.
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 (;).
Alternatively, the subexpressions can be stored in separate strings in
the multiple-valued input field.
Each subexpression is of the form:
<lhs> = <rhs>
The <lhs> can be any one of the outputs 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 (A-H) or a vector variable (tA-tH) by using the [] operator. For
example, oA[0] = <rhs>, will evaluate the right hand side and assign the
value to the first component of the output vector oA.
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:
MAXFLOAT
MINFLOAT
M_E
M_LOG2E
M_LOG10E
M_LN2
M_LN10
M_PI
M_SQRT2 = sqrt(2)
M_SQRT1_2 = sqrt(1/2)
Most of the pre-defined functions come from the math library:
Page 3SoCalculator(3IV)
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.
Note, when the input has multiple values, all the subexpressions
specified in the expression are applied to all the multiple input values.
This is unlike the SoBoolOperation engine, where each operation is
applied only to the corresponding entries of the input data. Note also,
that even though the inputs and outputs can have multiple values the []
operator is only for indexing into the values of a single vector. It does
not index into the multiple values of a field. For example, if the
floating-point input field a has two values: 1.0, and 2.0, then the
expression
"oA[0]=a; oA[1]=a; oA[2]=0.0"
will produce two output vectors in oA: (1.0, 1.0, 0.0) and (2.0, 2.0,
0.0).
Examples of expressions:
"ta = oA[0]*floor(a)"
"tb = (a+b)*sin(M_PI)"
"oA = vec3f(ta, tb, ta+tb)"
"oB = normalize(oA)"
"ta = a; tb = sin(ta); oA = vec3f(ta, tb, 0)"
INPUTS
SoMFFloat a
SoMFFloat b
SoMFFloat c
SoMFFloat d
SoMFFloat e
SoMFFloat f
SoMFFloat g
SoMFFloat h
Inputs a-h are the floating-point values.
Page 4SoCalculator(3IV)
SoMFVec3f A
SoMFVec3f B
SoMFVec3f C
SoMFVec3f D
SoMFVec3f E
SoMFVec3f F
SoMFVec3f G
SoMFVec3f H
Inputs A-H are the vectors.
SoMFString expression
The expression to be evaluated.
OUTPUTS
(SoMFFloat) oa
(SoMFFloat) ob
(SoMFFloat) oc
(SoMFFloat) od
Outputs oa-od are the floating-point values.
(SoMFVec3f) oA
(SoMFVec3f) oB
(SoMFVec3f) oC
(SoMFVec3f) oD
Outputs oA-oD are the vectors.
FUNCTIONSSoCalculator * SoCalculatorCreate()
Constructor
FILE FORMAT/DEFAULTS
Calculator {
a 0
b 0
c 0
d 0
e 0
f 0
g 0
h 0
A 0 0 0
B 0 0 0
C 0 0 0
D 0 0 0
E 0 0 0
F 0 0 0
G 0 0 0
H 0 0 0
expression ""
Page 5SoCalculator(3IV)
}
SEE ALSO
SoEngineOutput, SoBoolOperation
Page 6