00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00024
#ifndef __vtkXMLWriter_h
00025
#define __vtkXMLWriter_h
00026
00027
#include "vtkProcessObject.h"
00028
00029
class vtkCellData;
00030
class vtkDataArray;
00031
class vtkDataCompressor;
00032
class vtkDataSet;
00033
class vtkDataSetAttributes;
00034
class vtkOutputStream;
00035
class vtkPointData;
00036
class vtkPoints;
00037
00038 class VTK_IO_EXPORT vtkXMLWriter :
public vtkProcessObject
00039 {
00040
public:
00041 vtkTypeRevisionMacro(vtkXMLWriter,
vtkProcessObject);
00042
void PrintSelf(ostream& os,
vtkIndent indent);
00043
00044
00046
00047
enum { BigEndian, LittleEndian };
00048
00050
00051
00053
00056
enum { Ascii, Binary, Appended };
00057
00059
00060
00062
00065
enum { Int32=32, Int64=64 };
00066
00068
00070
00072 vtkSetMacro(ByteOrder,
int);
00073 vtkGetMacro(ByteOrder,
int);
00074
void SetByteOrderToBigEndian();
00075
void SetByteOrderToLittleEndian();
00077
00079
00081
virtual void SetIdType(
int);
00082 vtkGetMacro(IdType,
int);
00083
void SetIdTypeToInt32();
00084
void SetIdTypeToInt64();
00086
00088
00089 vtkSetStringMacro(FileName);
00090 vtkGetStringMacro(FileName);
00092
00094
00096
virtual void SetCompressor(
vtkDataCompressor*);
00097 vtkGetObjectMacro(Compressor,
vtkDataCompressor);
00099
00101
00105
virtual void SetBlockSize(
unsigned int blockSize);
00106 vtkGetMacro(BlockSize,
unsigned int);
00108
00110
00113 vtkSetMacro(DataMode,
int);
00114 vtkGetMacro(DataMode,
int);
00115
void SetDataModeToAscii();
00116
void SetDataModeToBinary();
00117
void SetDataModeToAppended();
00119
00121
00126 vtkSetMacro(EncodeAppendedData,
int);
00127 vtkGetMacro(EncodeAppendedData,
int);
00128 vtkBooleanMacro(EncodeAppendedData,
int);
00130
00132
virtual const char* GetDefaultFileExtension()=0;
00133
00135
int Write();
00136
00137
protected:
00138 vtkXMLWriter();
00139 ~vtkXMLWriter();
00140
00141
00142 char* FileName;
00143
00144
00145 ostream* Stream;
00146
00147
00148 int ByteOrder;
00149
00150
00151 int IdType;
00152
00153
00154
00155 int DataMode;
00156
00157
00158 int EncodeAppendedData;
00159
00160
00161 unsigned long AppendedDataPosition;
00162
00163
00164
00165
00166
00167
#if VTK_SIZEOF_SHORT == 4
00168
typedef unsigned short HeaderType;
00169
#elif VTK_SIZEOF_INT == 4
00170
typedef unsigned int HeaderType;
00171
#elif VTK_SIZEOF_LONG == 4
00172
typedef unsigned long HeaderType;
00173
#else
00174
# error "No native data type can represent an unsigned 32-bit integer."
00175
#endif
00176
00177
00178
00179
00180
00181
00182
# if VTK_SIZEOF_SHORT == 4
00183
typedef short Int32IdType;
00184
# elif VTK_SIZEOF_INT == 4
00185
typedef int Int32IdType;
00186
# elif VTK_SIZEOF_LONG == 4
00187
typedef long Int32IdType;
00188
# else
00189
# error "No native data type can represent a signed 32-bit integer."
00190
# endif
00191
00192
00193
00194 Int32IdType* Int32IdTypeBuffer;
00195
00196
00197 unsigned char* ByteSwapBuffer;
00198
00199
00200 vtkDataCompressor* Compressor;
00201 unsigned int BlockSize;
00202 unsigned long CompressionBlockNumber;
00203 HeaderType* CompressionHeader;
00204 unsigned int CompressionHeaderLength;
00205 unsigned long CompressionHeaderPosition;
00206
00207
00208
00209 vtkOutputStream* DataStream;
00210
00211
00212
virtual void SetDataStream(
vtkOutputStream*);
00213 vtkGetObjectMacro(DataStream,
vtkOutputStream);
00214
00215
00216
virtual int WriteInternal();
00217
00218
00219
00220
virtual int WriteData()=0;
00221
00222
00223
virtual const char* GetDataSetName()=0;
00224
00225
00226
virtual int GetDataSetMajorVersion();
00227
virtual int GetDataSetMinorVersion();
00228
00229
00230
vtkDataSet* GetInputAsDataSet();
00231
int StartFile();
00232
virtual void WriteFileAttributes();
00233
int EndFile();
00234
void DeleteFile();
00235
void DeleteFile(
const char* name);
00236
00237
void StartAppendedData();
00238
void EndAppendedData();
00239
unsigned long ReserveAttributeSpace(
const char* attr=0);
00240
unsigned long GetAppendedDataOffset();
00241
unsigned long WriteAppendedDataOffset(
unsigned long streamPos,
00242
const char* attr=0);
00243
int WriteBinaryData(
void* data,
int numWords,
int wordType);
00244
00245 int WriteBinaryData(
char* data)
00246 {
return this->WriteBinaryData(data, static_cast<int>(strlen(data)),
00247
VTK_CHAR); }
00248 int WriteBinaryData(
char* data,
int numWords)
00249 {
return this->WriteBinaryData(data, numWords,
VTK_CHAR); }
00250 int WriteBinaryData(
unsigned char* data,
int numWords)
00251 {
return this->WriteBinaryData(data, numWords,
VTK_UNSIGNED_CHAR); }
00252 int WriteBinaryData(
short* data,
int numWords)
00253 {
return this->WriteBinaryData(data, numWords,
VTK_SHORT); }
00254 int WriteBinaryData(
unsigned short* data,
int numWords)
00255 {
return this->WriteBinaryData(data, numWords,
VTK_UNSIGNED_SHORT); }
00256 int WriteBinaryData(
int* data,
int numWords)
00257 {
return this->WriteBinaryData(data, numWords,
VTK_INT); }
00258 int WriteBinaryData(
unsigned int* data,
int numWords)
00259 {
return this->WriteBinaryData(data, numWords,
VTK_UNSIGNED_INT); }
00260
00261
int WriteAsciiData(
void* data,
int numWords,
int wordType,
vtkIndent indent);
00262
00263 int WriteAsciiData(
char* data,
vtkIndent indent)
00264 {
return this->WriteAsciiData(data, static_cast<int>(strlen(data)),
00265
VTK_CHAR, indent); }
00266 int WriteAsciiData(
char* data,
int numWords,
vtkIndent indent)
00267 {
return this->WriteAsciiData(data, numWords,
VTK_CHAR, indent); }
00268 int WriteAsciiData(
unsigned char* data,
int numWords,
vtkIndent indent)
00269 {
return this->WriteAsciiData(data, numWords,
VTK_UNSIGNED_CHAR, indent); }
00270 int WriteAsciiData(
short* data,
int numWords,
vtkIndent indent)
00271 {
return this->WriteAsciiData(data, numWords,
VTK_SHORT, indent); }
00272 int WriteAsciiData(
unsigned short* data,
int numWords,
vtkIndent indent)
00273 {
return this->WriteAsciiData(data, numWords,
VTK_UNSIGNED_SHORT, indent); }
00274 int WriteAsciiData(
int* data,
int numWords,
vtkIndent indent)
00275 {
return this->WriteAsciiData(data, numWords,
VTK_INT, indent); }
00276 int WriteAsciiData(
unsigned int* data,
int numWords,
vtkIndent indent)
00277 {
return this->WriteAsciiData(data, numWords,
VTK_UNSIGNED_INT, indent); }
00278
00279
int WriteScalarAttribute(
const char* name,
int data);
00280
int WriteScalarAttribute(
const char* name,
float data);
00281
#ifdef VTK_ID_TYPE_IS_NOT_BASIC_TYPE
00282
int WriteScalarAttribute(
const char* name,
vtkIdType data);
00283
#endif
00284
00285
int WriteVectorAttribute(
const char* name,
int length,
int* data);
00286
int WriteVectorAttribute(
const char* name,
int length,
float* data);
00287
int WriteVectorAttribute(
const char* name,
int length,
double* data);
00288
#ifdef VTK_ID_TYPE_IS_NOT_BASIC_TYPE
00289
int WriteVectorAttribute(
const char* name,
int length,
vtkIdType* data);
00290
#endif
00291
00292
int WriteDataModeAttribute(
const char* name);
00293
int WriteWordTypeAttribute(
const char* name,
int dataType);
00294
int WriteStringAttribute(
const char* name,
const char* value);
00295
00296
unsigned long WriteDataArrayAppended(
vtkDataArray* a,
vtkIndent indent,
00297
const char* alternateName=0);
00298
void WriteDataArrayAppendedData(
vtkDataArray* a,
unsigned long pos);
00299
void WriteDataArrayInline(
vtkDataArray* a,
vtkIndent indent,
00300
const char* alternateName=0);
00301
void WriteInlineData(
void* data,
int numWords,
int wordType,
00302
vtkIndent indent);
00303
00304
00305
void WritePointDataInline(
vtkPointData* pd,
vtkIndent indent);
00306
void WriteCellDataInline(
vtkCellData* cd,
vtkIndent indent);
00307
unsigned long* WritePointDataAppended(
vtkPointData* pd,
vtkIndent indent);
00308
void WritePointDataAppendedData(
vtkPointData* pd,
unsigned long* pdPositions);
00309
unsigned long* WriteCellDataAppended(
vtkCellData* cd,
vtkIndent indent);
00310
void WriteCellDataAppendedData(
vtkCellData* cd,
unsigned long* cdPositions);
00311
void WriteAttributeIndices(
vtkDataSetAttributes* dsa,
char** names);
00312
unsigned long WritePointsAppended(
vtkPoints* points,
vtkIndent indent);
00313
void WritePointsAppendedData(
vtkPoints* points,
unsigned long pointsPosition);
00314
void WritePointsInline(
vtkPoints* points,
vtkIndent indent);
00315
void WriteCoordinatesInline(
vtkDataArray* xc,
vtkDataArray* yc,
00316
vtkDataArray* zc,
vtkIndent indent);
00317
unsigned long* WriteCoordinatesAppended(
vtkDataArray* xc,
vtkDataArray* yc,
00318
vtkDataArray* zc,
vtkIndent indent);
00319
void WriteCoordinatesAppendedData(
vtkDataArray* xc,
vtkDataArray* yc,
00320
vtkDataArray* zc,
00321
unsigned long* cPositions);
00322
virtual vtkDataArray* CreateArrayForPoints(
vtkDataArray* inArray);
00323
virtual vtkDataArray* CreateArrayForCells(
vtkDataArray* inArray);
00324
virtual vtkDataArray* CreateExactCoordinates(
vtkDataArray* inArray,
int xyz);
00325
void WritePPointData(
vtkPointData* pd,
vtkIndent indent);
00326
void WritePCellData(
vtkCellData* cd,
vtkIndent indent);
00327
void WritePPoints(
vtkPoints* points,
vtkIndent indent);
00328
void WritePDataArray(
vtkDataArray* a,
vtkIndent indent,
00329
const char* alternateName=0);
00330
void WritePCoordinates(
vtkDataArray* xc,
vtkDataArray* yc,
00331
vtkDataArray* zc,
vtkIndent indent);
00332
00333
00334
int WriteBinaryDataInternal(
void* data,
int numWords,
int wordType);
00335
int WriteBinaryDataBlock(
unsigned char* in_data,
int numWords,
int wordType);
00336
void PerformByteSwap(
void* data,
int numWords,
int wordSize);
00337
int CreateCompressionHeader(
unsigned long size);
00338
int WriteCompressionBlock(
unsigned char* data,
unsigned long size);
00339
int WriteCompressionHeader();
00340
unsigned long GetWordTypeSize(
int dataType);
00341
const char* GetWordTypeName(
int dataType);
00342
unsigned long GetOutputWordTypeSize(
int dataType);
00343
00344
char** CreateStringArray(
int numStrings);
00345
void DestroyStringArray(
int numStrings,
char** strings);
00346
00347
00348
00349
virtual void GetProgressRange(
float* range);
00350
virtual void SetProgressRange(
float* range,
int curStep,
int numSteps);
00351
virtual void SetProgressRange(
float* range,
int curStep,
float* fractions);
00352
virtual void SetProgressPartial(
float fraction);
00353
virtual void UpdateProgressDiscrete(
float progress);
00354 float ProgressRange[2];
00355
00356
private:
00357 vtkXMLWriter(
const vtkXMLWriter&);
00358
void operator=(
const vtkXMLWriter&);
00359 };
00360
00361
#endif