00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00023
#ifndef __vtkXMLReader_h
00024
#define __vtkXMLReader_h
00025
00026
#include "vtkSource.h"
00027
00028
class vtkCallbackCommand;
00029
class vtkDataArray;
00030
class vtkDataArraySelection;
00031
class vtkDataSet;
00032
class vtkDataSetAttributes;
00033
class vtkXMLDataElement;
00034
class vtkXMLDataParser;
00035
00036 class VTK_IO_EXPORT vtkXMLReader :
public vtkSource
00037 {
00038
public:
00039 vtkTypeRevisionMacro(vtkXMLReader,
vtkSource);
00040
void PrintSelf(ostream& os,
vtkIndent indent);
00041
00043
00044 vtkSetStringMacro(FileName);
00045 vtkGetStringMacro(FileName);
00047
00049
virtual int CanReadFile(
const char* name);
00050
00052
00053
vtkDataSet* GetOutputAsDataSet();
00054
vtkDataSet* GetOutputAsDataSet(
int index);
00056
00058
00060 vtkGetObjectMacro(PointDataArraySelection,
vtkDataArraySelection);
00061 vtkGetObjectMacro(CellDataArraySelection,
vtkDataArraySelection);
00063
00065
00066
int GetNumberOfPointArrays();
00067
int GetNumberOfCellArrays();
00069
00071
00073
const char* GetPointArrayName(
int index);
00074
const char* GetCellArrayName(
int index);
00076
00078
00080
int GetPointArrayStatus(
const char* name);
00081
int GetCellArrayStatus(
const char* name);
00082
void SetPointArrayStatus(
const char* name,
int status);
00083
void SetCellArrayStatus(
const char* name,
int status);
00085
00086
protected:
00087 vtkXMLReader();
00088 ~vtkXMLReader();
00089
00090
00091
void ExecuteInformation();
00092
void ExecuteData(
vtkDataObject* output);
00093
00094
00095
00096
00097
virtual void ReadXMLInformation();
00098
virtual void ReadXMLData();
00099
00100
00101
virtual const char* GetDataSetName()=0;
00102
00103
00104
virtual int CanReadFileVersion(
int major,
int minor);
00105
00106
00107
virtual void SetupEmptyOutput()=0;
00108
00109
00110
virtual void SetupOutputInformation();
00111
00112
00113
virtual void SetupOutputData();
00114
00115
00116
00117
virtual int ReadPrimaryElement(
vtkXMLDataElement* ePrimary);
00118
00119
00120
00121
int ReadVTKFile(
vtkXMLDataElement* eVTKFile);
00122
00123
00124
00125
vtkDataArray* CreateDataArray(
vtkXMLDataElement* da);
00126
00127
00128
int OpenVTKFile();
00129
void CloseVTKFile();
00130
virtual void CreateXMLParser();
00131
virtual void DestroyXMLParser();
00132
void SetupCompressor(
const char* type);
00133
int CanReadFileVersionString(
const char* version);
00134
00135
00136
int IntersectExtents(
int* extent1,
int* extent2,
int* result);
00137
int Min(
int a,
int b);
00138
int Max(
int a,
int b);
00139
void ComputeDimensions(
int* extent,
int* dimensions,
int isPoint);
00140
void ComputeIncrements(
int* extent,
int* increments,
int isPoint);
00141
unsigned int GetStartTuple(
int* extent,
int* increments,
00142
int i,
int j,
int k);
00143
void ReadAttributeIndices(
vtkXMLDataElement* eDSA,
00144
vtkDataSetAttributes* dsa);
00145
char** CreateStringArray(
int numStrings);
00146
void DestroyStringArray(
int numStrings,
char** strings);
00147
00148
00149
void SetDataArraySelections(
vtkXMLDataElement* eDSA,
00150
vtkDataArraySelection* sel);
00151
00152
00153
int PointDataArrayIsEnabled(
vtkXMLDataElement* ePDA);
00154
int CellDataArrayIsEnabled(
vtkXMLDataElement* eCDA);
00155
00156
00157
static void SelectionModifiedCallback(
vtkObject* caller,
unsigned long eid,
00158
void* clientdata,
void* calldata);
00159
00160
00161 vtkXMLDataParser* XMLParser;
00162
00163
00164 char* FileName;
00165
00166
00167 istream* Stream;
00168
00169
00170 vtkDataArraySelection* PointDataArraySelection;
00171 vtkDataArraySelection* CellDataArraySelection;
00172
00173
00174
00175 vtkCallbackCommand* SelectionObserver;
00176
00177
00178 int InformationError;
00179
00180
00181 int DataError;
00182
00183
00184
00185 int CurrentOutput;
00186
00187
00188
00189
virtual void GetProgressRange(
float* range);
00190
virtual void SetProgressRange(
float* range,
int curStep,
int numSteps);
00191
virtual void SetProgressRange(
float* range,
int curStep,
float* fractions);
00192
virtual void UpdateProgressDiscrete(
float progress);
00193 float ProgressRange[2];
00194
00195
private:
00196
00197 ifstream* FileStream;
00198
00199
private:
00200 vtkXMLReader(
const vtkXMLReader&);
00201
void operator=(
const vtkXMLReader&);
00202 };
00203
00204
#endif