00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00028 #ifndef __vtkStreamingDemandDrivenPipeline_h
00029 #define __vtkStreamingDemandDrivenPipeline_h
00030
00031 #include "vtkDemandDrivenPipeline.h"
00032
00033 class vtkExtentTranslator;
00034 class vtkInformationDoubleKey;
00035 class vtkInformationDoubleVectorKey;
00036 class vtkInformationIntegerKey;
00037 class vtkInformationIntegerVectorKey;
00038 class vtkInformationObjectBaseKey;
00039 class vtkInformationStringKey;
00040 class vtkInformationIdTypeKey;
00041
00042 class VTK_FILTERING_EXPORT vtkStreamingDemandDrivenPipeline : public vtkDemandDrivenPipeline
00043 {
00044 public:
00045 static vtkStreamingDemandDrivenPipeline* New();
00046 vtkTypeRevisionMacro(vtkStreamingDemandDrivenPipeline,vtkDemandDrivenPipeline);
00047 void PrintSelf(ostream& os, vtkIndent indent);
00048
00050
00052 virtual int ProcessRequest(vtkInformation* request,
00053 vtkInformationVector** inInfo,
00054 vtkInformationVector* outInfo);
00056
00058
00059 virtual int Update();
00060 virtual int Update(int port);
00061 virtual int UpdateWholeExtent();
00063
00066 int PropagateUpdateExtent(int outputPort);
00067
00069
00073 int SetMaximumNumberOfPieces(int port, int n);
00074 int SetMaximumNumberOfPieces(vtkInformation *, int n);
00075 int GetMaximumNumberOfPieces(int port);
00076 int GetMaximumNumberOfPieces(vtkInformation *);
00078
00080
00083 int SetWholeExtent(vtkInformation *, int extent[6]);
00084 void GetWholeExtent(vtkInformation *, int extent[6]);
00085 int* GetWholeExtent(vtkInformation *);
00087
00089
00093 int SetUpdateExtentToWholeExtent(int port);
00094 int SetUpdateExtentToWholeExtent(vtkInformation *);
00096
00098
00099 int SetUpdateExtent(int port, int extent[6]);
00100 int SetUpdateExtent(vtkInformation *, int extent[6]);
00101 void GetUpdateExtent(vtkInformation *, int extent[6]);
00102 int* GetUpdateExtent(vtkInformation *);
00104
00106
00108 int SetUpdateExtent(int port,
00109 int piece, int numPieces, int ghostLevel);
00110 int SetUpdateExtent(vtkInformation *,
00111 int piece, int numPieces, int ghostLevel);
00112 int SetUpdatePiece(vtkInformation *, int piece);
00113 int GetUpdatePiece(vtkInformation *);
00114 int SetUpdateNumberOfPieces(vtkInformation *, int n);
00115 int GetUpdateNumberOfPieces(vtkInformation *);
00116 int SetUpdateGhostLevel(vtkInformation *, int n);
00117 int GetUpdateGhostLevel(vtkInformation *);
00118 int SetUpdateResolution(int port, double r);
00119 int SetUpdateResolution(vtkInformation *, double r);
00120 double GetUpdateResolution(vtkInformation *);
00122
00124
00128 int SetSplitUpdateExtent(int port,
00129 int major, int minor,
00130 int numPieces,
00131 int ghostLevel)
00132 {
00133 return this->SetUpdateExtent(port, major+minor, numPieces, ghostLevel);
00134 }
00136
00137
00139
00140 int SetUpdateTimeSteps(int port, double *times, int length);
00141 int SetUpdateTimeSteps(vtkInformation *, double *times, int length);
00142 int SetUpdateTimeStep(int port, double time);
00143
00145
00147
00153 int SetRequestExactExtent(int port, int flag);
00154 int GetRequestExactExtent(int port);
00156
00158
00160 int SetExtentTranslator(int port, vtkExtentTranslator* translator);
00161 int SetExtentTranslator(vtkInformation *, vtkExtentTranslator* translator);
00162 vtkExtentTranslator* GetExtentTranslator(int port);
00163 vtkExtentTranslator* GetExtentTranslator(vtkInformation *info);
00165
00167
00170 int SetWholeBoundingBox(int port, double bb[6]);
00171 void GetWholeBoundingBox(int port, double bb[6]);
00172 double* GetWholeBoundingBox(int port);
00174
00176
00179 int SetPieceBoundingBox(int port, double bb[6]);
00180 void GetPieceBoundingBox(int port, double bb[6]);
00181 double* GetPieceBoundingBox(int port);
00183
00185 static vtkInformationRequestKey* REQUEST_UPDATE_EXTENT();
00186
00189 static vtkInformationRequestKey* REQUEST_UPDATE_EXTENT_INFORMATION();
00190
00192 static vtkInformationRequestKey* REQUEST_RESOLUTION_PROPAGATE();
00193
00196 static vtkInformationIntegerKey* CONTINUE_EXECUTING();
00197
00199 static vtkInformationObjectBaseKey* EXTENT_TRANSLATOR();
00200
00202
00203 static vtkInformationIntegerKey* UPDATE_EXTENT_INITIALIZED();
00204 static vtkInformationIntegerVectorKey* UPDATE_EXTENT();
00205 static vtkInformationIntegerKey* UPDATE_PIECE_NUMBER();
00206 static vtkInformationIntegerKey* UPDATE_NUMBER_OF_PIECES();
00207 static vtkInformationIntegerKey* UPDATE_NUMBER_OF_GHOST_LEVELS();
00209
00212 static vtkInformationIntegerKey* UPDATE_EXTENT_TRANSLATED();
00213
00215 static vtkInformationIntegerVectorKey* WHOLE_EXTENT();
00216
00219 static vtkInformationIntegerKey* MAXIMUM_NUMBER_OF_PIECES();
00220
00223 static vtkInformationDoubleVectorKey* WHOLE_BOUNDING_BOX();
00224
00227 static vtkInformationDoubleVectorKey* PIECE_BOUNDING_BOX();
00228
00230 static vtkInformationIntegerKey* EXACT_EXTENT();
00231
00233 static vtkInformationDoubleVectorKey* TIME_STEPS();
00234
00236 static vtkInformationDoubleVectorKey* TIME_RANGE();
00237
00239 static vtkInformationDoubleVectorKey* UPDATE_TIME_STEPS();
00240
00243 static vtkInformationDoubleKey* PRIORITY();
00244
00247 static vtkInformationDoubleKey* UPDATE_RESOLUTION();
00248
00251 static vtkInformationIntegerKey* REMOVE_ATTRIBUTE_INFORMATION();
00252
00259
00260
00261 static vtkInformationIntegerKey* FAST_PATH_FOR_TEMPORAL_DATA();
00262
00263
00264 static vtkInformationStringKey* FAST_PATH_OBJECT_TYPE();
00265
00266 static vtkInformationStringKey* FAST_PATH_ID_TYPE();
00267
00268 static vtkInformationIdTypeKey* FAST_PATH_OBJECT_ID();
00269
00271
00275 double ComputePriority()
00276 {
00277 return this->ComputePriority(0);
00278 }
00279 virtual double ComputePriority(int port);
00281
00282 protected:
00283 vtkStreamingDemandDrivenPipeline();
00284 ~vtkStreamingDemandDrivenPipeline();
00285
00287
00290 virtual void ResetUpdateInformation(vtkInformation* request,
00291 vtkInformationVector** inInfoVec,
00292 vtkInformationVector* outInfoVec);
00294
00295
00296
00297
00298
00299
00300
00301
00302 static vtkInformationDoubleVectorKey* PREVIOUS_UPDATE_TIME_STEPS();
00303
00304
00305
00306
00307 static vtkInformationIdTypeKey* PREVIOUS_FAST_PATH_OBJECT_ID();
00308 static vtkInformationStringKey* PREVIOUS_FAST_PATH_OBJECT_TYPE();
00309 static vtkInformationStringKey* PREVIOUS_FAST_PATH_ID_TYPE();
00310
00311
00312
00313 virtual int NeedToExecuteBasedOnTime(vtkInformation* outInfo,
00314 vtkDataObject* dataObject);
00315
00316
00317 virtual int NeedToExecuteBasedOnFastPathData(vtkInformation* outInfo);
00318
00319
00320
00321 virtual int ExecuteInformation(vtkInformation* request,
00322 vtkInformationVector** inInfoVec,
00323 vtkInformationVector* outInfoVec);
00324
00325
00326 virtual void CopyDefaultInformation(vtkInformation* request, int direction,
00327 vtkInformationVector** inInfoVec,
00328 vtkInformationVector* outInfoVec);
00329
00330
00331 virtual int VerifyOutputInformation(int outputPort,
00332 vtkInformationVector** inInfoVec,
00333 vtkInformationVector* outInfoVec);
00334
00335
00336
00337 virtual int NeedToExecuteData(int outputPort,
00338 vtkInformationVector** inInfoVec,
00339 vtkInformationVector* outInfoVec);
00340
00341
00342 virtual void ExecuteDataStart(vtkInformation* request,
00343 vtkInformationVector** inInfoVec,
00344 vtkInformationVector* outInfoVec);
00345 virtual void ExecuteDataEnd(vtkInformation* request,
00346 vtkInformationVector** inInfoVec,
00347 vtkInformationVector* outInfoVec);
00348
00349
00350 virtual void MarkOutputsGenerated(vtkInformation* request,
00351 vtkInformationVector** inInfoVec,
00352 vtkInformationVector* outInfoVec);
00353
00354
00355
00356 virtual void ResetPipelineInformation(int port, vtkInformation*);
00357
00358
00359
00360 int ContinueExecuting;
00361
00362 vtkInformation *UpdateExtentRequest;
00363
00364
00365 int LastPropogateUpdateExtentShortCircuited;
00366
00367 private:
00368 vtkStreamingDemandDrivenPipeline(const vtkStreamingDemandDrivenPipeline&);
00369 void operator=(const vtkStreamingDemandDrivenPipeline&);
00370 };
00371
00372 #endif