00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00026 #ifndef __vtkDemandDrivenPipeline_h
00027 #define __vtkDemandDrivenPipeline_h
00028
00029 #include "vtkExecutive.h"
00030
00031 class vtkAbstractArray;
00032 class vtkDataArray;
00033 class vtkDataSetAttributes;
00034 class vtkDemandDrivenPipelineInternals;
00035 class vtkFieldData;
00036 class vtkInformation;
00037 class vtkInformationIntegerKey;
00038 class vtkInformationVector;
00039 class vtkInformationKeyVectorKey;
00040 class vtkInformationUnsignedLongKey;
00041
00042 class VTK_FILTERING_EXPORT vtkDemandDrivenPipeline : public vtkExecutive
00043 {
00044 public:
00045 static vtkDemandDrivenPipeline* New();
00046 vtkTypeRevisionMacro(vtkDemandDrivenPipeline,vtkExecutive);
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
00060 ComputePipelineMTime(vtkInformation* request,
00061 vtkInformationVector** inInfoVec,
00062 vtkInformationVector* outInfoVec,
00063 int requestFromOutputPort,
00064 unsigned long* mtime);
00066
00068
00070 virtual int Update();
00071 virtual int Update(int port);
00073
00075
00076 vtkGetMacro(PipelineMTime, unsigned long);
00078
00081 virtual int SetReleaseDataFlag(int port, int n);
00082
00084 virtual int GetReleaseDataFlag(int port);
00085
00087 virtual int UpdatePipelineMTime();
00088
00092 virtual int UpdateDataObject();
00093
00095 virtual int UpdateInformation();
00096
00100 virtual int UpdateData(int outputPort);
00101
00103 static vtkInformationRequestKey* REQUEST_DATA_OBJECT();
00104
00107 static vtkInformationRequestKey* REQUEST_INFORMATION();
00108
00110 static vtkInformationRequestKey* REQUEST_DATA();
00111
00114 static vtkInformationRequestKey* REQUEST_DATA_NOT_GENERATED();
00115
00118 static vtkInformationIntegerKey* RELEASE_DATA();
00119
00123 static vtkInformationIntegerKey* DATA_NOT_GENERATED();
00124
00128 static vtkDataObject* NewDataObject(const char* type);
00129
00130 protected:
00131 vtkDemandDrivenPipeline();
00132 ~vtkDemandDrivenPipeline();
00133
00134
00135 virtual int ExecuteDataObject(vtkInformation* request,
00136 vtkInformationVector** inInfo,
00137 vtkInformationVector* outInfo);
00138 virtual int ExecuteInformation(vtkInformation* request,
00139 vtkInformationVector** inInfo,
00140 vtkInformationVector* outInfo);
00141 virtual int ExecuteData(vtkInformation* request,
00142 vtkInformationVector** inInfo,
00143 vtkInformationVector* outInfo);
00144
00145
00146
00147 virtual void ResetPipelineInformation(int port, vtkInformation*);
00148
00149
00150
00151 virtual int CheckDataObject(int port, vtkInformationVector* outInfo);
00152
00153
00154
00155 int InputCountIsValid(vtkInformationVector **);
00156 int InputCountIsValid(int port,vtkInformationVector **);
00157 int InputTypeIsValid(vtkInformationVector **);
00158 int InputTypeIsValid(int port,vtkInformationVector **);
00159 virtual int InputTypeIsValid(int port, int index,vtkInformationVector **);
00160 int InputFieldsAreValid(vtkInformationVector **);
00161 int InputFieldsAreValid(int port,vtkInformationVector **);
00162 virtual int InputFieldsAreValid(int port, int index,vtkInformationVector **);
00163
00164
00165 int DataSetAttributeExists(vtkDataSetAttributes* dsa, vtkInformation* field);
00166 int FieldArrayExists(vtkFieldData* data, vtkInformation* field);
00167 int ArrayIsValid(vtkAbstractArray* array, vtkInformation* field);
00168
00169
00170 int InputIsOptional(int port);
00171 int InputIsRepeatable(int port);
00172
00173
00174 virtual int NeedToExecuteData(int outputPort,
00175 vtkInformationVector** inInfoVec,
00176 vtkInformationVector* outInfoVec);
00177
00178
00179 virtual void ExecuteDataStart(vtkInformation* request,
00180 vtkInformationVector** inInfoVec,
00181 vtkInformationVector* outInfoVec);
00182 virtual void ExecuteDataEnd(vtkInformation* request,
00183 vtkInformationVector** inInfoVec,
00184 vtkInformationVector* outInfoVec);
00185 virtual void MarkOutputsGenerated(vtkInformation* request,
00186 vtkInformationVector** inInfoVec,
00187 vtkInformationVector* outInfoVec);
00188
00189
00190
00191 unsigned long PipelineMTime;
00192
00193
00194 vtkTimeStamp DataObjectTime;
00195 vtkTimeStamp InformationTime;
00196 vtkTimeStamp DataTime;
00197
00198
00199 friend class vtkCompositeDataPipeline;
00200
00201
00202
00203 vtkInformation *InfoRequest;
00204 vtkInformation *DataObjectRequest;
00205 vtkInformation *DataRequest;
00206
00207 private:
00208 vtkDemandDrivenPipeline(const vtkDemandDrivenPipeline&);
00209 void operator=(const vtkDemandDrivenPipeline&);
00210 };
00211
00212 #endif