CHOP/CHOP_Spring.h
#ifndef __CHOP_Spring__
#define __CHOP_Spring__
#include <CHOP/CHOP_Realtime.h>
#define ARG_SPR_SPRING_CONSTANT (myParmBase + 0)
#define ARG_SPR_MASS (myParmBase + 1)
#define ARG_SPR_DAMPING_CONSTANT (myParmBase + 2)
#define ARG_SPR_METHOD (myParmBase + 3)
#define ARG_SPR_GRAB_INITIAL (myParmBase + 4)
#define ARG_SPR_INITIAL_DISPLACEMENT (myParmBase + 5)
#define ARG_SPR_INITIAL_VELOCITY (myParmBase + 6)
class UT_Interrupt;
namespace HDK_Sample {
class CHOP_Spring : public CHOP_Realtime
{
public:
static OP_Node *myConstructor(OP_Network *,
const char *,
OP_Operator *);
static OP_TemplatePair myTemplatePair;
static OP_VariablePair myVariablePair;
static PRM_Template myTemplateList[];
static CH_LocalVariable myVariableList[];
OP_ERROR cookMyChop(OP_Context &context);
OP_ERROR cookMySlice(OP_Context &context,
int start, int end);
virtual unsigned disableParms();
virtual bool evalVariableValue(
fpreal &val, int index, int thread);
virtual bool evalVariableValue(
UT_String &v, int i, int thread)
{
return evalVariableValue(v, i, thread);
}
virtual int usesScope() const { return 1; };
virtual int usesSampleMatch() const { return 0; };
virtual int usesUnits() { return getInput(0) ? 0 : 1; };
virtual int isSteady() const;
virtual const char * getTimeSliceExtension() { return "spring"; }
protected:
CHOP_Spring(OP_Network *net,
const char *name,
OP_Operator *op);
virtual ~CHOP_Spring();
virtual ut_RealtimeData * newRealtimeDataBlock(const char *name,
const CL_Track *track,
fpreal t);
private:
int METHOD()
{ return evalInt(ARG_SPR_METHOD, 0, 0); }
fpreal SPRING_CONSTANT(fpreal t)
{ return evalFloat(ARG_SPR_SPRING_CONSTANT, 0, t); }
fpreal MASS(fpreal t)
{ return evalFloat(ARG_SPR_MASS, 0, t); }
void SET_MASS(fpreal t, fpreal f)
{ setFloat(ARG_SPR_MASS, 0, t, f); }
fpreal DAMPING_CONSTANT(fpreal t)
{ return evalFloat(ARG_SPR_DAMPING_CONSTANT, 0, t); }
bool GRAB_INITIAL()
{ return (bool) evalInt(ARG_SPR_GRAB_INITIAL, 0, 0); }
fpreal INITIAL_DISPLACEMENT(fpreal t)
{ return evalFloat(ARG_SPR_INITIAL_DISPLACEMENT, 0, t); }
fpreal INITIAL_VELOCITY(fpreal t)
{ return evalFloat(ARG_SPR_INITIAL_VELOCITY, 0, t); }
int my_NC;
int my_C;
int myChannelDependent;
int mySteady;
};
}
#endif