00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00033 #ifndef __vtkNetCDFReader_h
00034 #define __vtkNetCDFReader_h
00035
00036 #include "vtkDataObjectAlgorithm.h"
00037
00038 #include "vtkSmartPointer.h"
00039
00040
00041 class vtkDataArraySelection;
00042 class vtkDataSet;
00043 class vtkDoubleArray;
00044 class vtkIntArray;
00045 class vtkStdString;
00046 class vtkStringArray;
00047
00048 class VTK_IO_EXPORT vtkNetCDFReader : public vtkDataObjectAlgorithm
00049 {
00050 public:
00051 vtkTypeMacro(vtkNetCDFReader, vtkDataObjectAlgorithm);
00052 static vtkNetCDFReader *New();
00053 virtual void PrintSelf(ostream &os, vtkIndent indent);
00054
00055 virtual void SetFileName(const char *filename);
00056 vtkGetStringMacro(FileName);
00057
00060 int UpdateMetaData();
00061
00062
00063
00064
00065
00066
00068
00069 virtual int GetNumberOfVariableArrays();
00070 virtual const char *GetVariableArrayName(int idx);
00071 virtual int GetVariableArrayStatus(const char *name);
00072 virtual void SetVariableArrayStatus(const char *name, int status);
00074
00079 virtual vtkStringArray *GetAllVariableArrayNames();
00080
00082
00087 vtkGetObjectMacro(VariableDimensions, vtkStringArray);
00089
00096 virtual void SetDimensions(const char *dimensions);
00097
00099
00104 vtkGetObjectMacro(AllDimensions, vtkStringArray);
00106
00108
00116 vtkGetMacro(ReplaceFillValueWithNan, int);
00117 vtkSetMacro(ReplaceFillValueWithNan, int);
00118 vtkBooleanMacro(ReplaceFillValueWithNan, int);
00120
00121 protected:
00122 vtkNetCDFReader();
00123 ~vtkNetCDFReader();
00124
00125 char *FileName;
00126 vtkTimeStamp FileNameMTime;
00127 vtkTimeStamp MetaDataMTime;
00128
00129
00131 vtkSmartPointer<vtkIntArray> LoadingDimensions;
00132
00133 vtkSmartPointer<vtkDataArraySelection> VariableArraySelection;
00134
00135 vtkSmartPointer<vtkStringArray> AllVariableArrayNames;
00136
00138 vtkStringArray *VariableDimensions;
00139
00141
00142 vtkStringArray *AllDimensions;
00143
00145
00146 int ReplaceFillValueWithNan;
00147
00148 int WholeExtent[6];
00149
00150 virtual int RequestDataObject(vtkInformation *request,
00151 vtkInformationVector **inputVector,
00152 vtkInformationVector *outputVector);
00153
00154 virtual int RequestInformation(vtkInformation *request,
00155 vtkInformationVector **inputVector,
00156 vtkInformationVector *outputVector);
00157
00158 virtual int RequestData(vtkInformation *request,
00159 vtkInformationVector **inputVector,
00160 vtkInformationVector *outputVector);
00161
00163
00164 static void SelectionModifiedCallback(vtkObject *caller, unsigned long eid,
00165 void *clientdata, void *calldata);
00167
00170 vtkStdString DescribeDimensions(int ncFD, const int *dimIds, int numDims);
00171
00174 virtual int ReadMetaData(int ncFD);
00175
00177 virtual int FillVariableDimensions(int ncFD);
00178
00184 virtual int IsTimeDimension(int ncFD, int dimId);
00185
00186
00188
00194 virtual vtkSmartPointer<vtkDoubleArray> GetTimeValues(int ncFD, int dimId);
00195
00197
00199
00204 virtual bool DimensionsAreForPointData(vtkIntArray *vtkNotUsed(dimensions)) {
00205 return true;
00206 }
00208
00213 virtual void GetUpdateExtentForOutput(vtkDataSet *output, int extent[6]);
00214
00216
00218 virtual int LoadVariable(int ncFD, const char *varName, double time,
00219 vtkDataSet *output);
00221
00222 private:
00223 vtkNetCDFReader(const vtkNetCDFReader &);
00224 void operator=(const vtkNetCDFReader &);
00225 };
00226
00227 #endif //__vtkNetCDFReader_h