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