VTK
|
00001 // -*- c++ -*- 00002 /*========================================================================= 00003 00004 Program: Visualization Toolkit 00005 Module: vtkNetCDFReader.h 00006 00007 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen 00008 All rights reserved. 00009 See Copyright.txt or http://www.kitware.com/Copyright.htm for details. 00010 00011 This software is distributed WITHOUT ANY WARRANTY; without even 00012 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00013 PURPOSE. See the above copyright notice for more information. 00014 00015 =========================================================================*/ 00016 00017 /*------------------------------------------------------------------------- 00018 Copyright 2008 Sandia Corporation. 00019 Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, 00020 the U.S. Government retains certain rights in this software. 00021 -------------------------------------------------------------------------*/ 00022 00033 #ifndef __vtkNetCDFReader_h 00034 #define __vtkNetCDFReader_h 00035 00036 #include "vtkIONetCDFModule.h" // For export macro 00037 #include "vtkDataObjectAlgorithm.h" 00038 00039 #include "vtkSmartPointer.h" // For ivars 00040 00041 00042 class vtkDataArraySelection; 00043 class vtkDataSet; 00044 class vtkDoubleArray; 00045 class vtkIntArray; 00046 class vtkStdString; 00047 class vtkStringArray; 00048 00049 class VTKIONETCDF_EXPORT vtkNetCDFReader : public vtkDataObjectAlgorithm 00050 { 00051 public: 00052 vtkTypeMacro(vtkNetCDFReader, vtkDataObjectAlgorithm); 00053 static vtkNetCDFReader *New(); 00054 virtual void PrintSelf(ostream &os, vtkIndent indent); 00055 00056 virtual void SetFileName(const char *filename); 00057 vtkGetStringMacro(FileName); 00058 00061 int UpdateMetaData(); 00062 00063 // // Description: 00064 // // Get the data array selection tables used to configure which variables to 00065 // // load. 00066 // vtkGetObjectMacro(VariableArraySelection, vtkDataArraySelection); 00067 00069 00070 virtual int GetNumberOfVariableArrays(); 00071 virtual const char *GetVariableArrayName(int idx); 00072 virtual int GetVariableArrayStatus(const char *name); 00073 virtual void SetVariableArrayStatus(const char *name, int status); 00075 00080 virtual vtkStringArray *GetAllVariableArrayNames(); 00081 00083 00088 vtkGetObjectMacro(VariableDimensions, vtkStringArray); 00090 00097 virtual void SetDimensions(const char *dimensions); 00098 00100 00105 vtkGetObjectMacro(AllDimensions, vtkStringArray); 00107 00109 00117 vtkGetMacro(ReplaceFillValueWithNan, int); 00118 vtkSetMacro(ReplaceFillValueWithNan, int); 00119 vtkBooleanMacro(ReplaceFillValueWithNan, int); 00121 00122 protected: 00123 vtkNetCDFReader(); 00124 ~vtkNetCDFReader(); 00125 00126 char *FileName; 00127 vtkTimeStamp FileNameMTime; 00128 vtkTimeStamp MetaDataMTime; 00129 00130 //BTX 00132 vtkSmartPointer<vtkIntArray> LoadingDimensions; 00133 00134 vtkSmartPointer<vtkDataArraySelection> VariableArraySelection; 00135 00136 vtkSmartPointer<vtkStringArray> AllVariableArrayNames; 00137 00139 vtkStringArray *VariableDimensions; 00140 00142 00143 vtkStringArray *AllDimensions; 00144 //ETX 00146 00147 int ReplaceFillValueWithNan; 00148 00149 int WholeExtent[6]; 00150 00151 virtual int RequestDataObject(vtkInformation *request, 00152 vtkInformationVector **inputVector, 00153 vtkInformationVector *outputVector); 00154 00155 virtual int RequestInformation(vtkInformation *request, 00156 vtkInformationVector **inputVector, 00157 vtkInformationVector *outputVector); 00158 00159 virtual int RequestData(vtkInformation *request, 00160 vtkInformationVector **inputVector, 00161 vtkInformationVector *outputVector); 00162 00164 00165 static void SelectionModifiedCallback(vtkObject *caller, unsigned long eid, 00166 void *clientdata, void *calldata); 00168 00171 vtkStdString DescribeDimensions(int ncFD, const int *dimIds, int numDims); 00172 00175 virtual int ReadMetaData(int ncFD); 00176 00178 virtual int FillVariableDimensions(int ncFD); 00179 00185 virtual int IsTimeDimension(int ncFD, int dimId); 00186 00187 //BTX 00189 00195 virtual vtkSmartPointer<vtkDoubleArray> GetTimeValues(int ncFD, int dimId); 00196 //ETX 00198 00200 00205 virtual bool DimensionsAreForPointData(vtkIntArray *vtkNotUsed(dimensions)) { 00206 return true; 00207 } 00209 00214 virtual void GetUpdateExtentForOutput(vtkDataSet *output, int extent[6]); 00215 00217 00219 virtual int LoadVariable(int ncFD, const char *varName, double time, 00220 vtkDataSet *output); 00222 00223 private: 00224 vtkNetCDFReader(const vtkNetCDFReader &); // Not implemented 00225 void operator=(const vtkNetCDFReader &); // Not implemented 00226 00227 int UpdateExtent[6]; 00228 }; 00229 00230 #endif //__vtkNetCDFReader_h