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_SOENGINE_H
00025 #define COIN_SOENGINE_H
00026
00027 #include <Inventor/fields/SoFieldContainer.h>
00028
00029 class SoEngineList;
00030 class SoEngineOutput;
00031 class SoEngineOutputList;
00032 class SoEngineOutputData;
00033
00034 class COIN_DLL_API SoEngine : public SoFieldContainer {
00035 typedef SoFieldContainer inherited;
00036
00037 public:
00038 static void initClass(void);
00039 static void initClasses(void);
00040 static SoType getClassTypeId(void);
00041
00042 void evaluateWrapper(void);
00043
00044 virtual int getOutputs(SoEngineOutputList & l) const;
00045 SoEngineOutput * getOutput(const SbName & outputname) const;
00046 SbBool getOutputName(const SoEngineOutput * output, SbName & outputname) const;
00047 virtual const SoEngineOutputData * getOutputData(void) const = 0;
00048 static SoEngine * getByName(const SbName & name);
00049 static int getByName(const SbName & name, SoEngineList & el);
00050
00051 SbBool isNotifying(void) const;
00052 virtual void notify(SoNotList * nl);
00053
00054 SoEngine * copy(void) const;
00055 virtual SoFieldContainer * copyThroughConnection(void) const;
00056 SbBool shouldCopy(void) const;
00057
00058 virtual void writeInstance(SoOutput * out);
00059
00060
00061 protected:
00062 SoEngine(void);
00063 virtual ~SoEngine();
00064 virtual void evaluate(void) = 0;
00065
00066 virtual SbBool readInstance(SoInput * in, unsigned short flags);
00067 virtual void inputChanged(SoField * which);
00068
00069 static const SoFieldData ** getInputDataPtr(void);
00070 static const SoEngineOutputData ** getOutputDataPtr(void);
00071
00072 void writeOutputTypes(SoOutput * out);
00073
00074 private:
00075 virtual void destroy(void);
00076
00077 static SoType classTypeId;
00078 unsigned int flags;
00079 };
00080
00081 #if !defined(COIN_INTERNAL)
00082 #include <Inventor/engines/SoEngineOutput.h>
00083 #endif // COIN_INTERNAL
00084
00085 #endif // !COIN_SOENGINE_H