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 __EUC_Expression__
00031 #define __EUC_Expression__
00032
00033 #include "EUC_Object.h"
00034
00035 #include <UT/UT_PtrArray.h>
00036
00037 namespace HDK_Sample {
00038
00039 class EUC_Expression;
00040 typedef UT_PtrArray<EUC_Expression *> EUC_ExpressionList;
00041
00042
00043 class EUC_Expression
00044 {
00045 public:
00046 EUC_Expression();
00047 protected:
00048 virtual ~EUC_Expression();
00049 public:
00050
00051 void addRef();
00052 void removeRef();
00053
00054
00055
00056
00057 int getUid() const { return myUid; }
00058 static EUC_Expression *getExprFromUid(int uid);
00059
00060 void applyLook(EUC_Object *obj);
00061 void setLook(bool visible, const UT_Vector3 &cd);
00062
00063
00064
00065 void evaluate(EUC_ObjectList &results);
00066
00067 protected:
00068
00069
00070
00071 virtual void evaluateSubclass(EUC_ObjectList &result,
00072 EUC_ObjectList &totalobj) = 0;
00073
00074 public:
00075
00076
00077 void evaluateRecurse(EUC_ObjectList &result,
00078 EUC_ObjectList &totalobj);
00079 private:
00080 int myRefCount;
00081 int myUid;
00082
00083
00084 bool myVisible;
00085 UT_Vector3 myCd;
00086
00087
00088 static EUC_ExpressionList ourExpressionList;
00089
00090
00091 EUC_ObjectList myObjectCache;
00092 int myLastEvaluateTime;
00093 static int ourEvaluateTime;
00094 };
00095
00096
00097 class EUC_ExprPoint : public EUC_Expression
00098 {
00099 public:
00100 EUC_ExprPoint(const UT_Vector2 &pos);
00101
00102 protected:
00103 virtual void evaluateSubclass(EUC_ObjectList &result,
00104 EUC_ObjectList &totalobj);
00105 protected:
00106 UT_Vector2 myPos;
00107 };
00108
00109
00110 class EUC_ExprPointFromObject : public EUC_Expression
00111 {
00112 public:
00113 EUC_ExprPointFromObject(EUC_Expression *src, int idx);
00114 virtual ~EUC_ExprPointFromObject();
00115
00116 protected:
00117 virtual void evaluateSubclass(EUC_ObjectList &result,
00118 EUC_ObjectList &totalobj);
00119 protected:
00120 EUC_Expression *mySource;
00121 int myIndex;
00122 };
00123
00124
00125 class EUC_ExprLineFromPoints : public EUC_Expression
00126 {
00127 public:
00128 EUC_ExprLineFromPoints(EUC_Expression *pta, EUC_Expression *ptb);
00129 virtual ~EUC_ExprLineFromPoints();
00130
00131 protected:
00132 virtual void evaluateSubclass(EUC_ObjectList &result,
00133 EUC_ObjectList &totalobj);
00134 protected:
00135 EUC_Expression *myPtA, *myPtB;
00136 };
00137
00138
00139 class EUC_ExprCircleFromPoints : public EUC_Expression
00140 {
00141 public:
00142 EUC_ExprCircleFromPoints(EUC_Expression *center, EUC_Expression *pt);
00143 virtual ~EUC_ExprCircleFromPoints();
00144
00145 protected:
00146 virtual void evaluateSubclass(EUC_ObjectList &result,
00147 EUC_ObjectList &totalobj);
00148 protected:
00149 EUC_Expression *myCenter, *myPoint;
00150 };
00151
00152
00153 class EUC_ExprIntersect : public EUC_Expression
00154 {
00155 public:
00156 EUC_ExprIntersect(EUC_Expression *expra, EUC_Expression *exprb);
00157 virtual ~EUC_ExprIntersect();
00158
00159 protected:
00160 virtual void evaluateSubclass(EUC_ObjectList &result,
00161 EUC_ObjectList &totalobj);
00162 protected:
00163 EUC_Expression *myExprA, *myExprB;
00164 };
00165
00166
00167 class EUC_ExprSelect : public EUC_Expression
00168 {
00169 public:
00170 EUC_ExprSelect(EUC_Expression *src, int idx);
00171 virtual ~EUC_ExprSelect();
00172
00173 protected:
00174 virtual void evaluateSubclass(EUC_ObjectList &result,
00175 EUC_ObjectList &totalobj);
00176 protected:
00177 EUC_Expression *mySource;
00178 int myIndex;
00179 };
00180
00181 }
00182
00183 #endif