Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Related Pages  

IO/vtkXMLReader.h

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    $RCSfile: vtkXMLReader.h,v $
00005   Language:  C++
00006 
00007   Copyright (c) 1993-2002 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 =========================================================================*/
00037 #ifndef __vtkXMLReader_h
00038 #define __vtkXMLReader_h
00039 
00040 #include "vtkSource.h"
00041 
00042 class vtkCallbackCommand;
00043 class vtkDataArray;
00044 class vtkDataArraySelection;
00045 class vtkDataSet;
00046 class vtkDataSetAttributes;
00047 class vtkXMLDataElement;
00048 class vtkXMLDataParser;
00049 
00050 class VTK_IO_EXPORT vtkXMLReader : public vtkSource
00051 {
00052 public:
00053   vtkTypeRevisionMacro(vtkXMLReader,vtkSource);
00054   void PrintSelf(ostream& os, vtkIndent indent);
00055   
00057 
00058   vtkSetStringMacro(FileName);
00059   vtkGetStringMacro(FileName);
00061   
00063   virtual int CanReadFile(const char* name);
00064   
00066   vtkDataSet* GetOutputAsDataSet();
00067   
00069 
00071   vtkGetObjectMacro(PointDataArraySelection, vtkDataArraySelection);
00072   vtkGetObjectMacro(CellDataArraySelection, vtkDataArraySelection);
00074   
00076 
00077   int GetNumberOfPointArrays();
00078   int GetNumberOfCellArrays();
00080   
00082 
00084   const char* GetPointArrayName(int index);
00085   const char* GetCellArrayName(int index);
00087   
00089 
00091   int GetPointArrayStatus(const char* name);
00092   int GetCellArrayStatus(const char* name);
00093   void SetPointArrayStatus(const char* name, int status);  
00094   void SetCellArrayStatus(const char* name, int status);  
00096   
00097 protected:
00098   vtkXMLReader();
00099   ~vtkXMLReader();
00100   
00101   // Standard pipeline exectution methods.
00102   void ExecuteInformation();
00103   void ExecuteData(vtkDataObject* output);
00104   
00105   // Pipeline execution methods to be defined by subclass.  Called by
00106   // corresponding Execute methods after appropriate setup has been
00107   // done.
00108   virtual void ReadXMLInformation();
00109   virtual void ReadXMLData();
00110   
00111   // Get the name of the data set being read.
00112   virtual const char* GetDataSetName()=0;
00113   
00114   // Test if the reader can read a file with the given version number.
00115   virtual int CanReadFileVersion(int major, int minor);
00116   
00117   // Setup the output with no data available.  Used in error cases.
00118   virtual void SetupEmptyOutput()=0;
00119   
00120   // Setup the output's information and data without allocation.
00121   virtual void SetupOutputInformation();
00122   
00123   // Setup the output's information and data with allocation.
00124   virtual void SetupOutputData();
00125   
00126   // Read the primary element from the file.  This is the element
00127   // whose name is the value returned by GetDataSetName().
00128   virtual int ReadPrimaryElement(vtkXMLDataElement* ePrimary);
00129   
00130   // Read the top-level element from the file.  This is always the
00131   // VTKFile element.
00132   int ReadVTKFile(vtkXMLDataElement* eVTKFile);  
00133   
00134   // Create a vtkDataArray from its cooresponding XML representation.
00135   // Does not allocate.
00136   vtkDataArray* CreateDataArray(vtkXMLDataElement* da);
00137   
00138   // Internal utility methods.
00139   int OpenVTKFile();
00140   void CloseVTKFile();
00141   void CreateXMLParser();
00142   void DestroyXMLParser();
00143   void SetupCompressor(const char* type);
00144   int CanReadFileVersionString(const char* version);
00145   
00146   // Utility methods for subclasses.
00147   int IntersectExtents(int* extent1, int* extent2, int* result);
00148   int Min(int a, int b);
00149   int Max(int a, int b);
00150   void ComputeDimensions(int* extent, int* dimensions, int isPoint);
00151   void ComputeIncrements(int* extent, int* increments, int isPoint);
00152   unsigned int GetStartTuple(int* extent, int* increments,
00153                              int i, int j, int k);
00154   void ReadAttributeIndices(vtkXMLDataElement* eDSA,
00155                             vtkDataSetAttributes* dsa);
00156   char** CreateStringArray(int numStrings);
00157   void DestroyStringArray(int numStrings, char** strings);  
00158   
00159   // Setup the data array selections for the input's set of arrays.
00160   void SetDataArraySelections(vtkXMLDataElement* eDSA,
00161                               vtkDataArraySelection* sel);
00162   
00163   // Check whether the given array element is an enabled array.
00164   int PointDataArrayIsEnabled(vtkXMLDataElement* ePDA);
00165   int CellDataArrayIsEnabled(vtkXMLDataElement* eCDA);
00166   
00167   // Callback registered with the SelectionObserver.
00168   static void SelectionModifiedCallback(vtkObject* caller, unsigned long eid,
00169                                         void* clientdata, void* calldata);
00170   
00171   // The vtkXMLDataParser instance used to hide XML reading details.
00172   vtkXMLDataParser* XMLParser;
00173   
00174   // The input file's name.
00175   char* FileName;
00176   
00177   // The file stream used to read the input file.
00178   ifstream* FileStream;
00179   
00180   // The array selections.
00181   vtkDataArraySelection* PointDataArraySelection;
00182   vtkDataArraySelection* CellDataArraySelection;
00183   
00184   // The observer to modify this object when the array selections are
00185   // modified.
00186   vtkCallbackCommand* SelectionObserver;
00187   
00188   // Whether there was an error reading the file in ExecuteInformation.
00189   int InformationError;
00190   
00191   // Whether there was an error reading the file in ExecuteData.
00192   int DataError;
00193   
00194 private:
00195   vtkXMLReader(const vtkXMLReader&);  // Not implemented.
00196   void operator=(const vtkXMLReader&);  // Not implemented.
00197 };
00198 
00199 #endif