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_SOTIMECOUNTER_H
00025 #define COIN_SOTIMECOUNTER_H
00026
00027 #include <Inventor/engines/SoSubEngine.h>
00028 #include <Inventor/engines/SoEngineOutput.h>
00029 #include <Inventor/fields/SoSFTime.h>
00030 #include <Inventor/fields/SoSFFloat.h>
00031 #include <Inventor/fields/SoMFFloat.h>
00032 #include <Inventor/fields/SoSFBool.h>
00033 #include <Inventor/fields/SoSFTrigger.h>
00034 #include <Inventor/fields/SoSFShort.h>
00035
00036 class COIN_DLL_API SoTimeCounter : public SoEngine {
00037 typedef SoEngine inherited;
00038 SO_ENGINE_HEADER(SoTimeCounter);
00039
00040 public:
00041 SoSFTime timeIn;
00042 SoSFShort min;
00043 SoSFShort max;
00044 SoSFShort step;
00045 SoSFBool on;
00046 SoSFFloat frequency;
00047 SoMFFloat duty;
00048 SoSFShort reset;
00049 SoSFTrigger syncIn;
00050
00051 SoEngineOutput output;
00052 SoEngineOutput syncOut;
00053
00054 SoTimeCounter();
00055 static void initClass();
00056
00057 protected:
00058 virtual ~SoTimeCounter();
00059
00060 virtual void inputChanged(SoField * which);
00061 virtual void writeInstance(SoOutput * out);
00062
00063 private:
00064 virtual void evaluate(void);
00065 void calcStarttime(short value);
00066
00067 SbBool ispaused;
00068 double pausetimeincycle;
00069 SbBool firstoutputenable;
00070 short outputvalue;
00071 int numsteps;
00072 int stepnum;
00073 double starttime;
00074 double cyclelen;
00075 short findOutputValue(double timeincycle) const;
00076 void calcDutySteps(void);
00077 void calcNumSteps(void);
00078
00079 SbList <double> dutylimits;
00080 };
00081
00082 #endif // !COIN_SOTIMECOUNTER_H