VTK
dox/IO/vtkNetCDFReader.h
Go to the documentation of this file.
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 "vtkDataObjectAlgorithm.h"
00037 
00038 #include "vtkSmartPointer.h"    // For ivars
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 //   // Description:
00063 //   // Get the data array selection tables used to configure which variables to
00064 //   // load.
00065 //   vtkGetObjectMacro(VariableArraySelection, vtkDataArraySelection);
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 //BTX
00131   vtkSmartPointer<vtkIntArray> LoadingDimensions;
00132 
00133   vtkSmartPointer<vtkDataArraySelection> VariableArraySelection;
00134 
00135   vtkSmartPointer<vtkStringArray> AllVariableArrayNames;
00136 
00138   vtkStringArray *VariableDimensions;
00139 
00141 
00142   vtkStringArray *AllDimensions;
00143 //ETX
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 //BTX
00188 
00194   virtual vtkSmartPointer<vtkDoubleArray> GetTimeValues(int ncFD, int dimId);
00195 //ETX
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 &);     // Not implemented
00224   void operator=(const vtkNetCDFReader &);      // Not implemented
00225 };
00226 
00227 #endif //__vtkNetCDFReader_h