euclid/EUC_Expression.h
#ifndef __EUC_Expression__
#define __EUC_Expression__
#include "EUC_Object.h"
#include <UT/UT_PtrArray.h>
namespace HDK_Sample {
class EUC_Expression;
typedef UT_PtrArray<EUC_Expression *> EUC_ExpressionList;
class EUC_Expression
{
public:
EUC_Expression();
protected:
virtual ~EUC_Expression();
public:
void addRef();
void removeRef();
int getUid() const { return myUid; }
static EUC_Expression *getExprFromUid(int uid);
void applyLook(EUC_Object *obj);
void setLook(bool visible, const UT_Vector3 &cd);
void evaluate(EUC_ObjectList &results);
protected:
virtual void evaluateSubclass(EUC_ObjectList &result,
EUC_ObjectList &totalobj) = 0;
public:
void evaluateRecurse(EUC_ObjectList &result,
EUC_ObjectList &totalobj);
private:
int myRefCount;
int myUid;
bool myVisible;
UT_Vector3 myCd;
static EUC_ExpressionList ourExpressionList;
EUC_ObjectList myObjectCache;
int myLastEvaluateTime;
static int ourEvaluateTime;
};
class EUC_ExprPoint : public EUC_Expression
{
public:
EUC_ExprPoint(const UT_Vector2 &pos);
protected:
virtual void evaluateSubclass(EUC_ObjectList &result,
EUC_ObjectList &totalobj);
protected:
UT_Vector2 myPos;
};
class EUC_ExprPointFromObject : public EUC_Expression
{
public:
EUC_ExprPointFromObject(EUC_Expression *src, int idx);
virtual ~EUC_ExprPointFromObject();
protected:
virtual void evaluateSubclass(EUC_ObjectList &result,
EUC_ObjectList &totalobj);
protected:
EUC_Expression *mySource;
int myIndex;
};
class EUC_ExprLineFromPoints : public EUC_Expression
{
public:
EUC_ExprLineFromPoints(EUC_Expression *pta, EUC_Expression *ptb);
virtual ~EUC_ExprLineFromPoints();
protected:
virtual void evaluateSubclass(EUC_ObjectList &result,
EUC_ObjectList &totalobj);
protected:
EUC_Expression *myPtA, *myPtB;
};
class EUC_ExprCircleFromPoints : public EUC_Expression
{
public:
EUC_ExprCircleFromPoints(EUC_Expression *center, EUC_Expression *pt);
virtual ~EUC_ExprCircleFromPoints();
protected:
virtual void evaluateSubclass(EUC_ObjectList &result,
EUC_ObjectList &totalobj);
protected:
EUC_Expression *myCenter, *myPoint;
};
class EUC_ExprIntersect : public EUC_Expression
{
public:
EUC_ExprIntersect(EUC_Expression *expra, EUC_Expression *exprb);
virtual ~EUC_ExprIntersect();
protected:
virtual void evaluateSubclass(EUC_ObjectList &result,
EUC_ObjectList &totalobj);
protected:
EUC_Expression *myExprA, *myExprB;
};
class EUC_ExprSelect : public EUC_Expression
{
public:
EUC_ExprSelect(EUC_Expression *src, int idx);
virtual ~EUC_ExprSelect();
protected:
virtual void evaluateSubclass(EUC_ObjectList &result,
EUC_ObjectList &totalobj);
protected:
EUC_Expression *mySource;
int myIndex;
};
}
#endif