00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef _COP2_GENERATOR_H_
00021 #define _COP2_GENERATOR_H_
00022
00023 #include "COP2_API.h"
00024 #include <TIL/TIL_Defines.h>
00025 #include "COP2_MaskOp.h"
00026
00027
00028
00029 #define CREATE_PLANE_RGBA 0
00030 #define CREATE_PLANE_RGBA3 1
00031 #define CREATE_PLANE_RGB 2
00032 #define CREATE_PLANE_A 3
00033 #define CREATE_PLANE_A3 4
00034 #define CREATE_PLANE_M 5
00035 #define CREATE_PLANE_M3 6
00036 #define CREATE_PLANE_Z 7
00037 #define CREATE_PLANE_L 8
00038 #define CREATE_PLANE_B 9
00039 #define CREATE_PLANE_P 10
00040 #define CREATE_PLANE_N 11
00041 #define CREATE_PLANE_V 12
00042 #define CREATE_PLANE_NONE 13
00043
00044 #define ADD_REPLACE 0
00045 #define ADD_RENAME 1
00046 #define ADD_ADD 2
00047 #define ADD_SCREEN 3
00048 #define ADD_SUB 4
00049 #define ADD_MULT 5
00050 #define ADD_MIN 6
00051 #define ADD_MAX 7
00052 #define ADD_AVERAGE 8
00053
00054 class COP2_API COP2_Generator : public COP2_MaskOp
00055 {
00056 public:
00057 virtual TIL_Sequence *cookSequenceInfo(OP_ERROR &error);
00058
00059 virtual unsigned disableParms();
00060
00061 static int setResCallback(void *,int,float, const PRM_Template *);
00062 static int setRateCallback(void *,int,float,const PRM_Template *);
00063 static int setDepthCallback(void *,int,float,const PRM_Template*);
00064
00065 virtual bool isGenerator() const { return true; }
00066
00067 static OP_TemplatePair myTemplatePair;
00068 static OP_VariablePair myVariablePair;
00069 static PRM_Template myTemplateList[];
00070 static CH_LocalVariable myVariableList[];
00071 static PRM_Template myObsoleteParms[];
00072 static const char * myInputLabels[];
00073
00074 virtual bool isTimeModifier() const { return true; }
00075
00076 virtual void SET_ADD_PLANES(int planes)
00077 {
00078 if( canAccess(PRM_WRITE_OK) )
00079 setInt("addplanes",0,0, planes);
00080 }
00081
00082 virtual void SET_PLANES(int planes)
00083 {
00084 if( canAccess(PRM_WRITE_OK) )
00085 setInt("planes", 0, 0, planes);
00086 }
00087
00088 virtual void SET_FORMAT(TIL_DataFormat format)
00089 {
00090 if( canAccess(PRM_WRITE_OK) )
00091 setInt("depth", 0, 0, (int) format);
00092 }
00093
00094 virtual void SET_ADD_OP(int op)
00095 {
00096 if( canAccess(PRM_WRITE_OK) )
00097 setInt("addplaneop", 0, 0, op);
00098 }
00099
00100 virtual void SET_CUSTOM_PLANES(const UT_String &st)
00101 {
00102 if( canAccess(PRM_WRITE_OK) )
00103 setString(st, CH_STRING_LITERAL,
00104 "customplanes",0,0);
00105 }
00106
00107 static int depthChanged(void *, int, float, const PRM_Template *);
00108 static int overrideSizeChanged(void *, int, float, const PRM_Template *);
00109 static int overrideAspectChanged(void *,int, float, const PRM_Template *);
00110 static int overrideRangeChanged(void *,int, float, const PRM_Template *);
00111 static int overrideRateChanged(void *, int, float, const PRM_Template *);
00112
00113
00114
00115
00116 virtual void getInputDependenciesForOutputArea(
00117 COP2_CookAreaInfo &output_area,
00118 const COP2_CookAreaList &input_areas,
00119 COP2_CookAreaList &needed_areas);
00120
00121 virtual int getOpInput() const { return 0; }
00122 virtual int getMaskInput() const { return 1; }
00123 virtual bool isFrameEffectHandled() { return false; }
00124
00125 virtual int scope(UT_String &) { return 0; }
00126 virtual int frameScope(UT_String &) { return 0; }
00127 virtual bool isPixelBased() const { return false; }
00128
00129 virtual void inputConnectChanged(int which);
00130
00131 protected:
00132 COP2_Generator(OP_Network *parent, const char *name,
00133 OP_Operator *entry);
00134 virtual ~COP2_Generator();
00135
00136 virtual void computeImageBounds(COP2_Context &context);
00137
00138 virtual COP2_ThreadPref getThreadPreference() const
00139 { return COP2_THREAD_MULTI; }
00140
00141 virtual OP_ERROR doCookMyTile(COP2_Context &context,
00142 TIL_TileList *tilelist);
00143 virtual OP_ERROR generateTile(COP2_Context &context,
00144 TIL_TileList *tilelist) = 0;
00145
00146 const char * uniqueName(const char *name);
00147
00148 virtual void getGeneratedBounds(COP2_Context &context,
00149 int &bx1, int &by1,
00150 int &bx2, int &by2);
00151
00152 void applyMaskBounds(const TIL_Plane *plane, int array,
00153 float t, int xres,int yres, int thread,
00154 int &bx1,int &by1, int &bx2,int &by2);
00155
00156 void getBounds(const TIL_Plane *plane, int aindex,
00157 float t, int xres, int yres, int thread,
00158 int x1,int y1, int x2, int y2,
00159 int &bx1, int &by1, int &bx2, int &by2);
00160
00161 int OVERRIDE_SIZE()
00162 { return evalInt("overridesize",0,0); }
00163
00164 virtual void IMAGE_SIZE(int &x, int &y)
00165 { x = evalInt("size",0,0.0f);
00166 y = evalInt("size",1,0.0f); }
00167
00168 virtual void SET_XRES(int x)
00169 {
00170 if( canAccess(PRM_WRITE_OK) )
00171 setInt("size", 0, 0.0f, x);
00172 }
00173
00174 virtual void SET_YRES(int x)
00175 {
00176 if( canAccess(PRM_WRITE_OK) )
00177 setInt("size", 1, 0.0f, x);
00178 }
00179
00180 int OVERRIDE_ASPECT()
00181 { return evalInt("overrideaspect",0,0); }
00182
00183 virtual float ASPECT()
00184 { return evalFloat("aspect",0,0.0f); }
00185
00186 virtual int USEPLANES()
00187 { return evalInt("planes", 0, 0.0f); }
00188
00189 virtual int ADD_PLANES()
00190 { return evalInt("addplanes",0,0.0f); }
00191
00192 virtual int ADD_OP()
00193 { return evalInt("addplaneop", 0, 0.0f); }
00194
00195 virtual void CUSTOM_PLANES(UT_String &st)
00196 { evalString(st, "customplanes",0,0.0f); }
00197
00198 virtual TIL_DataFormat DEPTH();
00199
00200 virtual int USE_POINTS()
00201 { return evalInt("usebwpoints",0,0.0f); }
00202
00203 virtual void BW_POINTS(unsigned int &b, unsigned int &w);
00204
00205 virtual int INTERLACE()
00206 { return evalInt("interlace", 0,0.0f); }
00207
00208 virtual int IDOMINANCE()
00209 { return evalInt("idominance", 0,0.0f); }
00210
00211 virtual int SINGLE_IMAGE()
00212 { return evalInt("singleimage",0,0.0f); }
00213
00214 virtual int START()
00215 { return evalInt("start", 0, 0.0f); }
00216
00217 virtual int LENGTH()
00218 { return evalInt("length",0,0.0f); }
00219
00220 virtual void SET_START(int start)
00221 {
00222 if( canAccess(PRM_WRITE_OK) )
00223 {
00224 deAnimate("start");
00225 setInt("start",0,0.0f,start);
00226 }
00227 }
00228
00229 virtual void SET_LENGTH(int len)
00230 {
00231 if( canAccess(PRM_WRITE_OK) )
00232 {
00233 deAnimate("length");
00234 setInt("length", 0, 0.0f,len);
00235 }
00236 }
00237
00238 virtual float RATE();
00239
00240 virtual TIL_Extend PRE_EXTEND()
00241 { return (TIL_Extend)evalInt("preextend", 0, 0.0f); }
00242
00243 virtual int PRE_HOLD()
00244 { return evalInt("prehold", 0, 0.0f); }
00245
00246 virtual TIL_Extend POST_EXTEND()
00247 { return (TIL_Extend)evalInt("postextend",0,0.0f); }
00248
00249 virtual int POST_HOLD()
00250 { return evalInt("posthold",0,0.0f); }
00251
00252 virtual float AMOUNT(float t) { return evalFloat("effectamount", 0, t); }
00253 virtual int MASK_INPUT() { return 1; }
00254
00255 int myAddOp;
00256 TIL_Sequence myConnectedSequence;
00257 };
00258
00259
00260 #endif