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