00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef TIL_IMAGESOURCE_H
00022 #define TIL_IMAGESOURCE_H
00023
00024 #include "TIL_API.h"
00025 #include <stdlib.h>
00026
00027 #define TIL_GLOBAL_TIME 1.23456e18F
00028
00029 class UT_String;
00030 class UT_TokenString;
00031 class UT_WorkBuffer;
00032 class IMG_TileOptions;
00033
00034 class TIL_Plane;
00035 class TIL_Raster;
00036 class TIL_Sequence;
00037 class TIL_ColorCurves;
00038
00039 class TIL_API TIL_ImageSource
00040 {
00041 public:
00042 TIL_ImageSource();
00043
00044 void bumpRefCount(int i);
00045
00046 void invalidate() { myValidFlag = false; }
00047 bool isValid() const { return myValidFlag; }
00048
00049
00050 virtual float getGlobalTime() =0;
00051 virtual float getSampleRate() =0;
00052 virtual float getStartTime() =0;
00053 virtual float getEndTime() =0;
00054
00055
00056
00057 int getImageIndexFromTime(float t);
00058 int getFrameFromTime(float t);
00059
00060 virtual int doesImageExist(int ,
00061 bool = true)
00062 { return 1; }
00063
00064 virtual int getActualFrame(int frame) { return frame; }
00065 virtual void removeFrame(int ) { }
00066 virtual void addFrame(int ) { }
00067 virtual void removeSequence() {}
00068 virtual bool canAddFrame() { return false; }
00069
00070 virtual bool isNetwork() { return false; }
00071
00072
00073 virtual float getFrameTime(float t,
00074 bool = false,
00075 const TIL_Sequence * = 0)
00076 { return t; }
00077 virtual int getFrameShift(int fr,
00078 bool = false,
00079 const TIL_Sequence * =0)
00080 { return fr; }
00081
00082
00083
00084 virtual int getApparentFrame(int fr) { return fr; }
00085
00086
00087 virtual const char *getName() = 0;
00088 virtual void getFullName(UT_String &name) = 0;
00089 virtual void getFrameName(int frame, UT_String &name);
00090
00091
00092 virtual int equals(const TIL_ImageSource *) = 0;
00093
00094
00095
00096 virtual int open(short & ,
00097 int = 0,
00098 float = TIL_GLOBAL_TIME)
00099 { return 0; }
00100
00101
00102 virtual void close(short ) { ; }
00103
00104
00105 virtual bool isConstantSequence() const { return false; }
00106
00107
00108 virtual const TIL_Sequence *getSequence(float t) = 0;
00109
00110
00111
00112 virtual UT_TokenString *getID(float t, int xres, int yres,
00113 const TIL_Plane &plane,
00114 int array_index) = 0;
00115
00116 virtual void getImageBounds(const TIL_Plane &plane,
00117 int array_index,
00118 float t, int xres, int yres,
00119 int &x1, int &y1,
00120 int &x2, int &y2);
00121
00122
00123 virtual int getID() const = 0;
00124
00125
00126
00127 virtual int getImage(TIL_Raster *image,
00128 float t, int xres, int yres,
00129 const TIL_Plane &plane,
00130 int array_index,
00131 int xstart, int ystart,
00132 int xend, int yend, float gamma,
00133 bool include_alpha = false,
00134 bool is_interactive = false,
00135 int fxres = 0, int fyres = 0) = 0;
00136
00137 virtual void getInfo(UT_WorkBuffer &infotext);
00138 virtual void getComment(UT_String &comment, float t);
00139 virtual void setComment(const UT_String &comment, float t);
00140
00141
00142
00143 virtual int writeImage(const char *filename,
00144 const IMG_TileOptions *finfo,
00145 const TIL_Sequence *, int step =1,
00146 const char *uselut = 0,
00147 float gamma = 1.0F,
00148 void (*info)(void*, const char*)=0,
00149 void *data=0,
00150 bool suppress_summary_dialog=false);
00151
00152 virtual int writeImage(const char *filename,
00153 const IMG_TileOptions *finfo,
00154 int xres, int yres,
00155 const char *color,
00156 const char *alpha,
00157 int start, int end, int step =1,
00158 const char *uselut = 0,
00159 float gamma = 1.0F,
00160 void (*info)(void*, const char*)=0,
00161 void *data =0,
00162 bool suppress_summary_dialog=false);
00163
00164 virtual void writeImageComplete(int successcount,
00165 int failcount,
00166 const UT_String &failedfiles);
00167
00168
00169
00170
00171 virtual bool isCachingNeeded(int ) const { return true; }
00172
00173
00174 virtual unsigned long getVersion() { return 1; }
00175 virtual int isFrameLocked(float ) { return 0; }
00176 virtual int isAnythingLocked() { return 0; }
00177 virtual int isPlaneLocked(const TIL_Plane *,
00178 float ) { return 0; }
00179 virtual const TIL_Plane *getPreviewPlane(int ) { return 0; }
00180
00181 virtual void setMouseLocation(int mx, int my);
00182
00183 virtual void bumpVersion(bool ) { }
00184 virtual bool isSlowOperation() const { return false; }
00185
00186 virtual bool getColorCurves(const char *planename,
00187 int array, float t,
00188 TIL_ColorCurves &curves,
00189 UT_String &first,
00190 bool allnodes, int comp=-1,
00191 bool natural_range = true,
00192 float start = 0.0f,
00193 float end = 1.0f,
00194 int evalpoints = 0);
00195
00196 virtual bool allowUserSelection() const { return false; }
00197
00198 virtual TIL_ImageSource *selectParentSource(int px, int py,
00199 const char *planename,
00200 int array_index);
00201
00202
00203
00204 virtual bool hasPixelScript() const;
00205 virtual bool runPixelScript(int px, int py);
00206
00207
00208
00209 virtual bool isStereoscopicSource(float t) const;
00210 virtual int getLeftPlaneIndex(float t) const;
00211 virtual const char *getLeftPlaneName(float t) const;
00212 virtual int getRightPlaneIndex(float t) const;
00213 virtual const char *getRightPlaneName(float t) const;
00214
00215 protected:
00216 virtual ~TIL_ImageSource();
00217
00218 private:
00219 TIL_ImageSource & operator=(const TIL_ImageSource &);
00220
00221 int myRefCount;
00222 bool myValidFlag;
00223 };
00224
00225
00226
00227 class TIL_API TIL_Access
00228 {
00229 public:
00230 TIL_Access(TIL_ImageSource &source, int reset=0,
00231 float t = TIL_GLOBAL_TIME);
00232 ~TIL_Access();
00233
00234 bool isOpen() const { return myOpen; }
00235
00236 private:
00237 TIL_Access & operator=(const TIL_Access &);
00238
00239 TIL_ImageSource &mySource;
00240 short myAccessKey;
00241 bool myOpen;
00242 };
00243
00244 #endif