#ifndef __CHOP_Stair__
#define __CHOP_Stair__
#include <UT/UT_ExpandArray.h>
namespace HDK_Sample {
#define ARG_STAIR_NUMBER "number"
#define ARG_STAIR_HEIGHT "height"
#define ARG_STAIR_OFFSET "offset"
#define ARG_STAIR_DIRECTION "direction"
#define ARG_STAIR_NAME "channelname"
#define ARG_STAIR_START "start"
#define ARG_STAIR_END "end"
#define ARG_STAIR_RATE CHOP_SampleRateName.getToken()
#define ARG_STAIR_LEFT CHOP_ExtendLeftName.getToken()
#define ARG_STAIR_RIGHT CHOP_ExtendRightName.getToken()
#define ARG_STAIR_DEFAULT CHOP_DefaultValueName.getToken()
class CHOP_Stair : public CHOP_Node
{
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);
void cookMyHandles(OP_Context &context);
virtual unsigned disableParms();
virtual float handleChanged(CHOP_Handle *handle,
CHOP_HandleData *hdata);
virtual float shiftStart(float new_offset, float t);
protected:
CHOP_Stair(OP_Network *net,
const char *name, OP_Operator *op);
virtual ~CHOP_Stair();
virtual int usesUnits() { return 1; }
virtual int usesScope() const { return 0; }
virtual float getVariableValue(int index, int thread);
private:
int NUMBER(float t)
{ return evalInt(ARG_STAIR_NUMBER, 0, t); }
void SET_NUMBER(float t, int v)
{ setInt(ARG_STAIR_NUMBER, 0, t, v); }
float HEIGHT(float t)
{ return evalFloat(ARG_STAIR_HEIGHT, 0, t); }
void SET_HEIGHT(float t, float v)
{ setFloat(ARG_STAIR_HEIGHT, 0, t, v); }
float OFFSET(float t)
{ return evalFloat(ARG_STAIR_OFFSET, 0, t); }
void SET_OFFSET(float t, float v)
{ setFloat(ARG_STAIR_OFFSET, 0, t, v); }
int DIRECTION()
{ return evalInt(ARG_STAIR_DIRECTION, 0, 0); }
void CHAN_NAME(UT_String &label, float t)
{ evalString(label, ARG_STAIR_NAME, 0, t); }
float START(float t)
{ return toSample(evalFloat(ARG_STAIR_START,0,t)); }
void SET_START(float t, float f)
{ setFloat(ARG_STAIR_START, 0, t, toUnit(f)); }
float END(float t)
{ return toSample(evalFloat(ARG_STAIR_END,0,t), UNITS(), 1); }
void SET_END(float t, float f)
{ setFloat(ARG_STAIR_END, 0, t, toUnit(f, UNITS(), 1)); }
float RATE(float t) { return evalFloat(ARG_STAIR_RATE, 0, t); }
void SET_RATE(float t, float v)
{ setFloat(ARG_STAIR_RATE, 0, t, v); }
int LEXTEND() { return evalInt(ARG_STAIR_LEFT, 0, 0); }
int REXTEND() { return evalInt(ARG_STAIR_RIGHT, 0, 0); }
float DEFAULT(float t) { return evalFloat(ARG_STAIR_DEFAULT,0,t); }
void getInterval(float t, float *start, float *end);
int my_C;
int my_NC;
UT_ExpandArray myExpandArray;
};
}
#endif