00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef __CHOP_Spring__
00031 #define __CHOP_Spring__
00032
00033 #include <CHOP/CHOP_Realtime.h>
00034
00035
00036 #define ARG_SPR_SPRING_CONSTANT (myParmBase + 0)
00037 #define ARG_SPR_MASS (myParmBase + 1)
00038 #define ARG_SPR_DAMPING_CONSTANT (myParmBase + 2)
00039 #define ARG_SPR_METHOD (myParmBase + 3)
00040 #define ARG_SPR_GRAB_INITIAL (myParmBase + 4)
00041 #define ARG_SPR_INITIAL_DISPLACEMENT (myParmBase + 5)
00042 #define ARG_SPR_INITIAL_VELOCITY (myParmBase + 6)
00043
00044 class UT_Interrupt;
00045
00046 namespace HDK_Sample {
00047
00048 class CHOP_Spring : public CHOP_Realtime
00049 {
00050 public:
00051
00052 static OP_Node *myConstructor(OP_Network *,
00053 const char *,
00054 OP_Operator *);
00055 static OP_TemplatePair myTemplatePair;
00056 static OP_VariablePair myVariablePair;
00057 static PRM_Template myTemplateList[];
00058 static CH_LocalVariable myVariableList[];
00059
00060 OP_ERROR cookMyChop(OP_Context &context);
00061 OP_ERROR cookMySlice(OP_Context &context,
00062 int start, int end);
00063
00064 virtual unsigned disableParms();
00065 virtual float getVariableValue(int idx, int thread);
00066 virtual int usesScope() const { return 1; };
00067 virtual int usesSampleMatch() const { return 0; };
00068 virtual int usesUnits() { return getInput(0) ? 0 : 1; };
00069
00070 virtual int isSteady() const;
00071 virtual const char * getTimeSliceExtension() { return "spring"; }
00072
00073 protected:
00074
00075 CHOP_Spring(OP_Network *net,
00076 const char *name,
00077 OP_Operator *op);
00078 virtual ~CHOP_Spring();
00079
00080 virtual ut_RealtimeData * newRealtimeDataBlock(const char *name,
00081 const CL_Track *track,
00082 float t);
00083
00084 private:
00085
00086
00087 int METHOD()
00088 { return evalInt(ARG_SPR_METHOD, 0, 0); }
00089
00090 float SPRING_CONSTANT(float t)
00091 { return evalFloat(ARG_SPR_SPRING_CONSTANT, 0, t); }
00092
00093 float MASS(float t)
00094 { return evalFloat(ARG_SPR_MASS, 0, t); }
00095
00096 void SET_MASS(float t, float f)
00097 { setFloat(ARG_SPR_MASS, 0, t, f); }
00098
00099 float DAMPING_CONSTANT(float t)
00100 { return evalFloat(ARG_SPR_DAMPING_CONSTANT, 0, t); }
00101
00102 bool GRAB_INITIAL()
00103 { return (bool) evalInt(ARG_SPR_GRAB_INITIAL, 0, 0); }
00104
00105 float INITIAL_DISPLACEMENT(float t)
00106 { return evalFloat(ARG_SPR_INITIAL_DISPLACEMENT, 0, t); }
00107
00108 float INITIAL_VELOCITY(float t)
00109 { return evalFloat(ARG_SPR_INITIAL_VELOCITY, 0, t); }
00110
00111 int my_NC;
00112 int my_C;
00113 int myChannelDependent;
00114 int mySteady;
00115 };
00116
00117 }
00118
00119 #endif