VTK
dox/IO/Geometry/vtkChacoReader.h
Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    vtkChacoReader.h
00005 
00006   Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
00007   All rights reserved.
00008   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
00009 
00010      This software is distributed WITHOUT ANY WARRANTY; without even
00011      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
00012      PURPOSE.  See the above copyright notice for more information.
00013 
00014 =========================================================================*/
00015 /*----------------------------------------------------------------------------
00016  Copyright (c) Sandia Corporation
00017  See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details.
00018 ----------------------------------------------------------------------------*/
00019 
00035 #ifndef __vtkChacoReader_h
00036 #define __vtkChacoReader_h
00037 
00038 #include "vtkIOGeometryModule.h" // For export macro
00039 #include "vtkUnstructuredGridAlgorithm.h"
00040 
00041 class VTKIOGEOMETRY_EXPORT vtkChacoReader : public vtkUnstructuredGridAlgorithm
00042 {
00043 public:
00044   static vtkChacoReader *New();
00045   vtkTypeMacro(vtkChacoReader,vtkUnstructuredGridAlgorithm);
00046   void PrintSelf(ostream& os, vtkIndent indent);
00047 
00051   vtkSetStringMacro(BaseName);
00052   vtkGetStringMacro(BaseName);
00053 
00059   vtkSetMacro(GenerateGlobalElementIdArray, int);
00060   vtkGetMacro(GenerateGlobalElementIdArray, int);
00061   vtkBooleanMacro(GenerateGlobalElementIdArray, int);
00062 
00063   static const char *GetGlobalElementIdArrayName() { return "GlobalElementId"; }
00064 
00071   vtkSetMacro(GenerateGlobalNodeIdArray, int);
00072   vtkGetMacro(GenerateGlobalNodeIdArray, int);
00073   vtkBooleanMacro(GenerateGlobalNodeIdArray, int);
00074 
00075   static const char *GetGlobalNodeIdArrayName() { return "GlobalNodeId"; }
00076 
00080   vtkSetMacro(GenerateVertexWeightArrays, int);
00081   vtkGetMacro(GenerateVertexWeightArrays, int);
00082   vtkBooleanMacro(GenerateVertexWeightArrays, int);
00083 
00087   vtkGetMacro(NumberOfVertexWeights, int);
00088 
00095   const char *GetVertexWeightArrayName(int weight);
00096 
00103   vtkSetMacro(GenerateEdgeWeightArrays, int);
00104   vtkGetMacro(GenerateEdgeWeightArrays, int);
00105   vtkBooleanMacro(GenerateEdgeWeightArrays, int);
00106 
00110   vtkGetMacro(NumberOfEdgeWeights, int);
00111 
00118   const char *GetEdgeWeightArrayName(int weight);
00119 
00121 
00122   vtkGetMacro(Dimensionality, int);
00123   vtkGetMacro(NumberOfEdges, vtkIdType);
00124   vtkGetMacro(NumberOfVertices, vtkIdType);
00126 
00131   vtkGetMacro(NumberOfCellWeightArrays, int);
00132 
00137   vtkGetMacro(NumberOfPointWeightArrays, int);
00138 
00139 protected:
00140   vtkChacoReader();
00141   ~vtkChacoReader();
00142 
00143   int BuildOutputGrid(vtkUnstructuredGrid *gr);
00144 
00145   // methods for parsing Chaco files
00146 
00147   void CloseCurrentFile();
00148   int OpenCurrentFile();
00149 
00150   int InputGeom(vtkIdType nvtxs, int igeom, double *x, double *y, double *z);
00151   int InputGraph1();
00152   int InputGraph2( vtkIdType **start, vtkIdType **adjacency, double **vweights,
00153       double **eweights);
00154   int GetCoordsMetadata();
00155   void GetGraphMetadata();
00156 
00157   // methods for creating vtkUnstructuredGrid from Chaco file data
00158 
00159   int ReadFile(vtkUnstructuredGrid* output);
00160   void AddElementIds(vtkUnstructuredGrid* output);
00161   void AddNodeIds(vtkUnstructuredGrid* output);
00162 
00163   void MakeWeightArrayNames(int nv, int ne);
00164 
00165   // Parameters for controlling what is read in.
00166   char *BaseName;
00167   int GenerateGlobalElementIdArray;
00168   int GenerateGlobalNodeIdArray;
00169 
00170   int GenerateVertexWeightArrays;
00171   int GenerateEdgeWeightArrays;
00172 
00173   FILE *CurrentGeometryFP;
00174   FILE *CurrentGraphFP;
00175   char *CurrentBaseName;
00176   vtkSetStringMacro(CurrentBaseName);
00177 
00178   char **VarrayName;
00179   char **EarrayName;
00180 
00181   //----------------------------------------------------------------------
00182   // The following metadata is read during RequestInformation.  If you
00183   // add new metadata, you must modify vtkPChacoReader::RequestInformation
00184   // to include it when process 0 broadcasts the metadata.
00185 
00186   int Dimensionality;
00187   vtkIdType NumberOfVertices;
00188   vtkIdType NumberOfEdges;
00189   int NumberOfVertexWeights;   // in file
00190   int NumberOfEdgeWeights;     // in file
00191   int GraphFileHasVertexNumbers;
00192 
00193   //----------------------------------------------------------------------
00194 
00195   int NumberOfPointWeightArrays;   // in output unstuctured grid
00196   int NumberOfCellWeightArrays;    // in output unstuctured grid
00197 
00198   // Keep the points and cells
00199   // around so they don't need to be re-read when the
00200   // options change.
00201   vtkUnstructuredGrid *DataCache;
00202 
00203   // Should I re-read in the geometry and topology of the dataset
00204   int RemakeDataCacheFlag;
00205 
00206   int RequestInformation(
00207     vtkInformation *, vtkInformationVector **, vtkInformationVector *);
00208   int RequestData(
00209     vtkInformation *, vtkInformationVector **, vtkInformationVector *);
00210 
00211 private:
00212   vtkChacoReader(const vtkChacoReader&); // Not implemented
00213   void operator=(const vtkChacoReader&); // Not implemented
00214 
00215   double ReadVal(FILE *infile, int *end_flag);
00216   vtkIdType ReadInt(FILE *infile, int *end_flag);
00217   void FlushLine( FILE *infile);
00218   void ResetInputBuffers();
00219 
00220   char *Line;
00221   int Line_length;
00222   int Offset;
00223   int Break_pnt;
00224   int Save_pnt;
00225 
00226   void ClearWeightArrayNames();
00227 };
00228 
00229 #endif