VTK
dox/IO/NetCDF/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 "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