00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
#ifndef COIN_SOCALCULATOR_H
00021
#define COIN_SOCALCULATOR_H
00022
00023
#include <Inventor/engines/SoSubEngine.h>
00024
#include <Inventor/engines/SoEngineOutput.h>
00025
#include <Inventor/fields/SoMFFloat.h>
00026
#include <Inventor/fields/SoMFVec3f.h>
00027
#include <Inventor/fields/SoMFString.h>
00028
#include <Inventor/lists/SbList.h>
00029
00030
struct so_eval_node;
00031
00032 class COIN_DLL_API SoCalculator :
public SoEngine {
00033
typedef SoEngine inherited;
00034
00035 SO_ENGINE_HEADER(SoCalculator);
00036
00037
public:
00038
00039
SoMFFloat a, b, c, d, e, f, g, h;
00040
SoMFVec3f A, B, C, D, E, F, G, H;
00041
SoMFString expression;
00042
00043
00044
SoEngineOutput oa, ob, oc, od;
00045
SoEngineOutput oA, oB, oC, oD;
00046
00047 SoCalculator(
void);
00048
00049
static void initClass(
void);
00050
00051
protected:
00052 ~SoCalculator(
void);
00053
00054
virtual void inputChanged(
SoField * which);
00055
00056
private:
00057
virtual void evaluate(
void);
00058 SbList <struct so_eval_node*> evaluatorList;
00059
00060
static void readfieldcb(
const char *name,
float *data,
void *cbdata);
00061
static void writefieldcb(
const char *name,
float *data,
int comp,
void *cbdata);
00062
00063
void evaluateExpression(
struct so_eval_node *node,
const int fieldidx);
00064
void findUsed(
struct so_eval_node *node,
char *inused,
char *outused);
00065
00066
float ta_th[8];
00067
SbVec3f tA_tH[8];
00068
00069
float a_h[8];
00070
SbVec3f A_H[8];
00071
float oa_od[4];
00072
SbVec3f oA_oD[4];
00073 };
00074
00075
#endif // !COIN_SOCALCULATOR_H