00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef __POPNET_Node_h__
00015 #define __POPNET_Node_h__
00016
00017 #include "POPNET_API.h"
00018 #include <OP/OP_Network.h>
00019 #include <POP/POP_Node.h>
00020 #undef FLOAT_PARM
00021 #undef INT_PARM
00022 #undef STR_PARM
00023
00024 #include <POP/POP_Cache.h>
00025 #include <PRM/PRM_Include.h>
00026 #include <PRM/PRM_Name.h>
00027 #include <UT/UT_String.h>
00028
00029 #define PN_SWITCHER "switcher"
00030 #define PN_STARTTIME "timestart"
00031 #define PN_PREROLL "timepreroll"
00032 #define PN_INITIALSTATE "initialstate"
00033 #define PN_RANDOMSEED "seed"
00034 #define PN_OVERSAMPLE "oversample"
00035 #define PN_MAXPARTICLES "maxparticles"
00036 #define PN_REMOVEUNUSED "rmunused"
00037 #define PN_CACHEFRAMES "caching"
00038 #define PN_PATH1 "path1"
00039 #define PN_PATH2 "path2"
00040 #define PN_PATH3 "path3"
00041 #define PN_PATH4 "path4"
00042 #define PN_XFORMPATH "xformpath"
00043
00044 class UT_IStream;
00045 class GU_Detail;
00046
00047 class POPNET_API POPNET_Node : public OP_Network
00048 {
00049 public:
00050 virtual const char* getChildType (void) const;
00051 virtual const char* getOpType (void) const;
00052
00053 virtual OP_OpTypeId getChildTypeID() const;
00054 virtual OP_OpTypeId getOpTypeID() const;
00055
00056 static OP_Node* myConstructor (OP_Network* net, const char* name,
00057 OP_Operator* entry);
00058
00059 static OP_TemplatePair myTemplatePair;
00060 static PRM_Template myTemplateList[];
00061 static PRM_Template myObsoleteList[];
00062 static void buildOperatorTable (OP_OperatorTable &table);
00063 static OP_Operator *getManagementOperator();
00064
00065 virtual void resolveObsoleteParms(
00066 PRM_ParmList *obsolete_parms);
00067
00068
00069
00070 static void applyBackwardsPathCompatibility(
00071 PRM_ParmList *parms,
00072 PRM_ParmList *obsolete);
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082 POP_ContextData *getCookedContextData(float t,
00083 POP_ContextData *oldContextData);
00084
00085
00086
00087
00088 static void releaseContextData(POP_ContextData *contextData);
00089
00090 void needToRecookGuides();
00091 void updateGuideGeometry();
00092 void handleGeoSelectionChanged();
00093
00094 OP_Network *getXformObj();
00095
00096 void computeNeedReset();
00097 int needReset() { return myNeedReset; }
00098 int cacheObsolete() { return myCacheObsolete; }
00099 void reset();
00100
00101 virtual void opChanged(OP_EventType reason, void *data=0);
00102
00103 static int ourDoInfoFlag;
00104
00105 virtual void getNodeSpecificInfoText(OP_Context &context,
00106 int verbose,
00107 UT_WorkBuffer &text);
00108
00109 static void buildInstanceGuide(POP_ContextData *data);
00110
00111
00112 virtual unsigned maxOutputs() const { return 0; }
00113
00114
00115 virtual fpreal getW() const;
00116
00117 virtual fpreal getH() const;
00118
00119 protected:
00120 POPNET_Node (OP_Network* parent, const char* name,
00121 OP_Operator* op);
00122 virtual ~POPNET_Node (void);
00123
00124 virtual OP_ERROR cookMe (OP_Context &context);
00125 virtual OP_ERROR bypassMe(OP_Context &context, int &copied_input);
00126
00127 virtual OP_DATA_TYPE getCookedDataType (void) const;
00128 virtual void* getCookedData (OP_Context &);
00129 virtual void deleteCookedData (void);
00130 virtual int saveCookedData (const char *, OP_Context &);
00131 virtual int saveCookedData (ostream &os, OP_Context &, int binary = 0);
00132
00133 virtual const char* getFileExtension (int binary) const;
00134
00135 private:
00136 void buildPopTable();
00137 void initializeContextData(float frameInc,
00138 POP_Node *cookPop,
00139 POP_Node *displayPop);
00140 void changeCacheSize(int newsize);
00141
00142 float TIMESTART(void)
00143 { return evalFloat(PN_STARTTIME, 0, 0); }
00144 float TIMEPREROLL(void)
00145 { return evalFloat(PN_PREROLL, 0, 0); }
00146 void INITIALSTATE(UT_String &s)
00147 { evalString(s, PN_INITIALSTATE, 0, 0); }
00148 int RANDOMSEED(void)
00149 { return evalInt(PN_RANDOMSEED, 0, 0); }
00150 int OVERSAMPLE(void)
00151 { return evalInt(PN_OVERSAMPLE, 0, 0); }
00152 int MAXPARTICLES(void)
00153 { return evalInt(PN_MAXPARTICLES, 0, 0); }
00154 int RMUNUSED(void)
00155 { return evalInt(PN_REMOVEUNUSED, 0, 0); }
00156
00157
00158 int CACHEFRAMES()
00159 { return evalInt("caching", 0, 0); }
00160
00161 int myNeedReset;
00162 int myDoReset;
00163 int myNeedCookGuide;
00164 int myNeedUpdateGuideGeometry;
00165 int myCacheObsolete;
00166 float myPrevFPS;
00167 GU_Detail *myGdp;
00168 POP_ContextData *myLocalContextData;
00169 POP_ContextData *myCachedContextData;
00170 unsigned long myNetChecksum;
00171 POP_Node *myLastCookPop;
00172 POP_Cache myPopCache;
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184 double myLastCookTime;
00185
00186 static POP_ContextData theEmptyContextData;
00187 };
00188
00189 #endif