1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387
|
/*=========================================================================
Program: Visualization Toolkit
Module: vtkDataWriter.h
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
/**
* @class vtkDataWriter
* @brief helper class for objects that write VTK data files
*
* vtkDataWriter is a helper class that opens and writes the VTK header and
* point data (e.g., scalars, vectors, normals, etc.) from a vtk data file.
* See the VTK textbook and online resources for various formats.
*
* @sa
* vtkDataSetWriter vtkPolyDataWriter vtkStructuredGridWriter
* vtkStructuredPointsWriter vtkUnstructuredGridWriter
* vtkFieldDataWriter vtkRectilinearGridWriter
*/
#ifndef vtkDataWriter_h
#define vtkDataWriter_h
#include "vtkIOLegacyModule.h" // For export macro
#include "vtkWriter.h"
#include <locale> // For locale settings
VTK_ABI_NAMESPACE_BEGIN
class vtkCellArray;
class vtkDataArray;
class vtkDataSet;
class vtkFieldData;
class vtkGraph;
class vtkInformation;
class vtkInformationKey;
class vtkPoints;
class vtkTable;
class VTKIOLEGACY_EXPORT vtkDataWriter : public vtkWriter
{
public:
///@{
/**
* Standard methods for type information and printing.
*/
vtkTypeMacro(vtkDataWriter, vtkWriter);
void PrintSelf(ostream& os, vtkIndent indent) override;
///@}
/**
* Create object with default header, ASCII format, and default names for
* scalars, vectors, tensors, normals, and texture coordinates.
*/
static vtkDataWriter* New();
///@{
/**
* Specify the file name of VTK data file to write.
*/
vtkSetFilePathMacro(FileName);
vtkGetFilePathMacro(FileName);
///@}
// Currently VTK can write out two different versions of file format: files
// of VTK reader version 4.2 and previous; and VTK reader version 5.1 and
// later. This will likely change in the future. (Note: the major
// difference in the two formats is the way cell arrays are written out.)
// By default, Version 5.1 files are written out.
enum VTKFileVersion
{
VTK_LEGACY_READER_VERSION_4_2 = 42,
VTK_LEGACY_READER_VERSION_5_1 = 51
};
///@{
/**
* Specify the VTK file version to write. See the enum documentation above
* (VTKFileVersion) for additional information about supported versions.
* It is possible to get the file major and minor versions separately. See
* also vtkDataReader for related methods. (Note, the parsing of the
* FileVersion into major and minor version is as follows: the least
* significant digit is the minor version; the remaining digits are the
* major version.
*/
void SetFileVersion(int);
vtkGetMacro(FileVersion, int);
vtkGetMacro(FileMajorVersion, int);
vtkGetMacro(FileMinorVersion, int);
///@}
///@{
/**
* Enable writing to an OutputString instead of the default, a file.
*/
vtkSetMacro(WriteToOutputString, vtkTypeBool);
vtkGetMacro(WriteToOutputString, vtkTypeBool);
vtkBooleanMacro(WriteToOutputString, vtkTypeBool);
///@}
///@{
/**
* When WriteToOutputString in on, then a string is allocated, written to,
* and can be retrieved with these methods. The string is deleted during
* the next call to write ...
*/
vtkGetMacro(OutputStringLength, vtkIdType);
vtkGetStringMacro(OutputString);
unsigned char* GetBinaryOutputString()
{
return reinterpret_cast<unsigned char*>(this->OutputString);
}
///@}
/**
* When WriteToOutputString is on, this method returns a copy of the
* output string in a vtkStdString.
*/
vtkStdString GetOutputStdString();
/**
* This convenience method returns the string, sets the IVAR to nullptr,
* so that the user is responsible for deleting the string.
* I am not sure what the name should be, so it may change in the future.
*/
char* RegisterAndGetOutputString();
///@{
/**
* Specify the header for the VTK data file.
*/
vtkSetStringMacro(Header);
vtkGetStringMacro(Header);
///@}
///@{
/**
* If true, vtkInformation objects attached to arrays and array component
* nameswill be written to the output. The default is true.
*/
vtkSetMacro(WriteArrayMetaData, bool);
vtkGetMacro(WriteArrayMetaData, bool);
vtkBooleanMacro(WriteArrayMetaData, bool);
///@}
///@{
/**
* Specify the file type (ASCII or BINARY) of the VTK data file.
*/
vtkSetClampMacro(FileType, int, VTK_ASCII, VTK_BINARY);
vtkGetMacro(FileType, int);
void SetFileTypeToASCII() { this->SetFileType(VTK_ASCII); }
void SetFileTypeToBinary() { this->SetFileType(VTK_BINARY); }
///@}
///@{
/**
* Give a name to the scalar data. If not specified, uses default
* name "scalars".
*/
vtkSetStringMacro(ScalarsName);
vtkGetStringMacro(ScalarsName);
///@}
///@{
/**
* Give a name to the vector data. If not specified, uses default
* name "vectors".
*/
vtkSetStringMacro(VectorsName);
vtkGetStringMacro(VectorsName);
///@}
///@{
/**
* Give a name to the tensors data. If not specified, uses default
* name "tensors".
*/
vtkSetStringMacro(TensorsName);
vtkGetStringMacro(TensorsName);
///@}
///@{
/**
* Give a name to the normals data. If not specified, uses default
* name "normals".
*/
vtkSetStringMacro(NormalsName);
vtkGetStringMacro(NormalsName);
///@}
///@{
/**
* Give a name to the texture coordinates data. If not specified, uses
* default name "textureCoords".
*/
vtkSetStringMacro(TCoordsName);
vtkGetStringMacro(TCoordsName);
///@}
///@{
/**
* Give a name to the global ids data. If not specified, uses
* default name "global_ids".
*/
vtkSetStringMacro(GlobalIdsName);
vtkGetStringMacro(GlobalIdsName);
///@}
///@{
/**
* Give a name to the pedigree ids data. If not specified, uses
* default name "pedigree_ids".
*/
vtkSetStringMacro(PedigreeIdsName);
vtkGetStringMacro(PedigreeIdsName);
///@}
///@{
/**
* Give a name to the edge flags data. If not specified, uses
* default name "edge_flags".
*/
vtkSetStringMacro(EdgeFlagsName);
vtkGetStringMacro(EdgeFlagsName);
///@}
///@{
/**
* Give a name to the lookup table. If not specified, uses default
* name "lookupTable".
*/
vtkSetStringMacro(LookupTableName);
vtkGetStringMacro(LookupTableName);
///@}
///@{
/**
* Give a name to the field data. If not specified, uses default
* name "field".
*/
vtkSetStringMacro(FieldDataName);
vtkGetStringMacro(FieldDataName);
///@}
/**
* Open a vtk data file. Returns nullptr if error.
*/
virtual ostream* OpenVTKFile();
/**
* Write the header of a vtk data file. Returns 0 if error.
*/
int WriteHeader(ostream* fp);
/**
* Write out the points of the data set.
*/
int WritePoints(ostream* fp, vtkPoints* p);
/**
* Write out coordinates for rectilinear grids.
*/
int WriteCoordinates(ostream* fp, vtkDataArray* coords, int axes);
/**
* Write out the cells of the data set.
*/
int WriteCells(ostream* fp, vtkCellArray* cells, const char* label);
/**
* Write out the cells of the data set.
* @note Legacy implementation for file version < 5.0.
*/
int WriteCellsLegacy(ostream* fp, vtkCellArray* cells, const char* label);
/**
* Write the cell data (e.g., scalars, vectors, ...) of a vtk dataset.
* Returns 0 if error.
*/
int WriteCellData(ostream* fp, vtkDataSet* ds);
/**
* Write the point data (e.g., scalars, vectors, ...) of a vtk dataset.
* Returns 0 if error.
*/
int WritePointData(ostream* fp, vtkDataSet* ds);
/**
* Write the edge data (e.g., scalars, vectors, ...) of a vtk graph.
* Returns 0 if error.
*/
int WriteEdgeData(ostream* fp, vtkGraph* g);
/**
* Write the vertex data (e.g., scalars, vectors, ...) of a vtk graph.
* Returns 0 if error.
*/
int WriteVertexData(ostream* fp, vtkGraph* g);
/**
* Write the row data (e.g., scalars, vectors, ...) of a vtk table.
* Returns 0 if error.
*/
int WriteRowData(ostream* fp, vtkTable* g);
/**
* Write out the field data.
*/
int WriteFieldData(ostream* fp, vtkFieldData* f);
/**
* Write out the data associated with the dataset (i.e. field data owned by
* the dataset itself - distinct from that owned by the cells or points).
*/
int WriteDataSetData(ostream* fp, vtkDataSet* ds);
/**
* Close a vtk file.
*/
void CloseVTKFile(ostream* fp);
protected:
vtkDataWriter();
~vtkDataWriter() override;
vtkTypeBool WriteToOutputString;
char* OutputString;
vtkIdType OutputStringLength;
void WriteData() override; // dummy method to allow this class to be instantiated and delegated to
char* FileName;
int FileVersion;
int FileMajorVersion;
int FileMinorVersion;
char* Header;
int FileType;
bool WriteArrayMetaData;
char* ScalarsName;
char* VectorsName;
char* TensorsName;
char* TCoordsName;
char* NormalsName;
char* LookupTableName;
char* FieldDataName;
char* GlobalIdsName;
char* PedigreeIdsName;
char* EdgeFlagsName;
std::locale CurrentLocale;
int WriteArray(ostream* fp, int dataType, vtkAbstractArray* data, const char* format,
vtkIdType num, vtkIdType numComp);
int WriteScalarData(ostream* fp, vtkDataArray* s, vtkIdType num);
int WriteVectorData(ostream* fp, vtkDataArray* v, vtkIdType num);
int WriteNormalData(ostream* fp, vtkDataArray* n, vtkIdType num);
int WriteTCoordData(ostream* fp, vtkDataArray* tc, vtkIdType num);
int WriteTensorData(ostream* fp, vtkDataArray* t, vtkIdType num);
int WriteGlobalIdData(ostream* fp, vtkDataArray* g, vtkIdType num);
int WritePedigreeIdData(ostream* fp, vtkAbstractArray* p, vtkIdType num);
int WriteEdgeFlagsData(ostream* fp, vtkDataArray* edgeFlags, vtkIdType num);
bool CanWriteInformationKey(vtkInformation* info, vtkInformationKey* key);
/**
* Format is detailed \ref IOLegacyInformationFormat "here".
*/
int WriteInformation(ostream* fp, vtkInformation* info);
private:
vtkDataWriter(const vtkDataWriter&) = delete;
void operator=(const vtkDataWriter&) = delete;
};
VTK_ABI_NAMESPACE_END
#endif
|