VTK  9.7.20260805
vtkXMLReader.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2// SPDX-License-Identifier: BSD-3-Clause
15
16#ifndef vtkXMLReader_h
17#define vtkXMLReader_h
18
19#include "vtkAlgorithm.h"
20#include "vtkIOXMLModule.h" // For export macro
21#include "vtkSmartPointer.h" // for vtkSmartPointer.
22
23#include <istream> // for IStream
24#include <memory> // for std::unique_ptr
25#include <streambuf> // for Streambuf
26#include <string> // for std::string
27
28VTK_ABI_NAMESPACE_BEGIN
31class vtkCharArray;
32class vtkCommand;
33class vtkDataArray;
35class vtkDataSet;
37class vtkInformation;
40class vtkStringArray;
43
44class VTKIOXML_EXPORT vtkXMLReader : public vtkAlgorithm
45{
46public:
47 vtkTypeMacro(vtkXMLReader, vtkAlgorithm);
48 void PrintSelf(ostream& os, vtkIndent indent) override;
49
56
58
64
66
74
81 void SetInputString(const char* in);
82 void SetInputString(const char* in, int len);
83 void SetBinaryInputString(const char*, int len);
84 void SetInputString(const std::string& input)
85 {
86 this->SetBinaryInputString(input.c_str(), static_cast<int>(input.length()));
87 }
88
89
91
101
103
108 vtkSetMacro(ReadFromInputStream, bool);
109 vtkGetMacro(ReadFromInputStream, bool);
110 vtkBooleanMacro(ReadFromInputStream, bool);
112
114
123
125
133 virtual int CanReadFile(VTK_FILEPATH const char* name);
136
138
144
146
154
156
163
165
169 const char* GetTimeDataArray(int idx) const;
172
174
180 vtkGetStringMacro(ActiveTimeDataArrayName);
181 vtkSetStringMacro(ActiveTimeDataArrayName);
183
185
189 const char* GetPointArrayName(int index);
190 const char* GetCellArrayName(int index);
191 const char* GetColumnArrayName(int index);
193
195
199 int GetPointArrayStatus(const char* name);
200 int GetCellArrayStatus(const char* name);
201 void SetPointArrayStatus(const char* name, int status);
202 void SetCellArrayStatus(const char* name, int status);
203 int GetColumnArrayStatus(const char* name);
204 void SetColumnArrayStatus(const char* name, int status);
206
207 // For the specified port, copy the information this reader sets up in
208 // SetupOutputInformation to outInfo
209 virtual void CopyOutputInformation(vtkInformation* vtkNotUsed(outInfo), int vtkNotUsed(port)) {}
210
212
215 vtkSetMacro(TimeStep, int);
216 vtkGetMacro(TimeStep, int);
218
219 vtkGetMacro(NumberOfTimeSteps, int);
221
224 vtkGetVector2Macro(TimeStepRange, int);
225 vtkSetVector2Macro(TimeStepRange, int);
227
233
235 vtkInformationVector* outputVector) override;
236
238
243 vtkGetObjectMacro(ReaderErrorObserver, vtkCommand);
245
247
252 vtkGetObjectMacro(ParserErrorObserver, vtkCommand);
254
259
260protected:
262 ~vtkXMLReader() override;
263
265
270 virtual int ReadXMLInformation();
271 virtual void ReadXMLData();
273
277 virtual const char* GetDataSetName() = 0;
278
282 virtual int CanReadFileVersion(int major, int minor);
283
287 virtual void SetupEmptyOutput() = 0;
288
292 virtual void SetupOutputInformation(vtkInformation* vtkNotUsed(outInfo)) {}
293
297 virtual void SetupOutputData();
298
303 virtual int ReadPrimaryElement(vtkXMLDataElement* ePrimary);
304
309 virtual int ReadVTKFile(vtkXMLDataElement* eVTKFile);
310
316 int GetLocalDataType(vtkXMLDataElement* da, int datatype);
317
323
329
335
337
340 virtual int OpenStream();
341 virtual void CloseStream();
342 virtual int OpenVTKFile();
343 virtual void CloseVTKFile();
344 virtual int OpenVTKString();
345 virtual void CloseVTKString();
346 virtual void CreateXMLParser();
347 virtual void DestroyXMLParser();
348 void SetupCompressor(const char* type);
349 int CanReadFileVersionString(const char* version);
351
357 virtual int CanReadFileWithDataType(const char* dsname);
358
362 vtkGetMacro(FileMajorVersion, int);
363
367 vtkGetMacro(FileMinorVersion, int);
368
370
374 VTK_FUTURE_CONST int extent1[6], VTK_FUTURE_CONST int extent2[6], int result[6]);
375 void ComputePointDimensions(VTK_FUTURE_CONST int extent[6], int* dimensions);
376 void ComputePointIncrements(VTK_FUTURE_CONST int extent[6], vtkIdType* increments);
377 void ComputeCellDimensions(VTK_FUTURE_CONST int extent[6], int* dimensions);
378 void ComputeCellIncrements(VTK_FUTURE_CONST int extent[6], vtkIdType* increments);
380 VTK_FUTURE_CONST int extent[6], vtkIdType* increments, int i, int j, int k);
382 char** CreateStringArray(int numStrings);
383 void DestroyStringArray(int numStrings, char** strings);
385
392 virtual int ReadArrayValues(vtkXMLDataElement* da, vtkIdType arrayIndex, vtkAbstractArray* array,
393 vtkIdType startIndex, vtkIdType numValues, FieldType type = OTHER);
394
403 virtual int ReadArrayTuples(vtkXMLDataElement* da, vtkIdType arrayTupleIndex,
404 vtkAbstractArray* array, vtkIdType startTupleIndex, vtkIdType numTuples,
405 FieldType type = OTHER);
406
411
412 int SetFieldDataInfo(vtkXMLDataElement* eDSA, int association, vtkIdType numTuples,
413 vtkInformationVector*(&infoVector));
414
416
422
427 vtkObject* caller, unsigned long eid, void* clientdata, void* calldata);
428
434
445
446 // The vtkXMLDataParser instance used to hide XML reading details.
448
449 // The FieldData element representation.
451
452 // The input file's name.
453 char* FileName;
454
455 // The stream used to read the input.
456 std::istream* Stream;
457
458 // Whether this object is reading from a string or a file.
459 // Default is 0: read from file.
461
462 // The input string.
463 std::string InputString;
464
465 // The input array. Keeps a low memory footprint by sourcing StringStream from contents of this
466 // array
468
469 // The array selections.
474
480
486
487 // The observer to modify this object when the array selections are
488 // modified.
490
491 // Whether there was an error reading the file in RequestInformation.
493
494 // Whether there was an error reading the file in RequestData.
496
497 // incrementally fine-tuned progress updates.
498 virtual void GetProgressRange(float* range);
499 virtual void SetProgressRange(const float range[2], int curStep, int numSteps);
500 virtual void SetProgressRange(const float range[2], int curStep, const float* fractions);
501 virtual void UpdateProgressDiscrete(float progress);
503
504 virtual int RequestData(vtkInformation* request, vtkInformationVector** inputVector,
505 vtkInformationVector* outputVector);
506 virtual int RequestDataObject(vtkInformation* vtkNotUsed(request),
507 vtkInformationVector** vtkNotUsed(inputVector), vtkInformationVector* vtkNotUsed(outputVector))
508 {
509 return 1;
510 }
511 virtual int RequestInformation(vtkInformation* request, vtkInformationVector** inputVector,
512 vtkInformationVector* outputVector);
514
515 // Whether there was an error reading the XML.
517
518 // For structured data keep track of dimensions empty of cells. For
519 // unstructured data these are always zero. This is used to support
520 // 1-D and 2-D cell data.
521 int AxesEmpty[3];
522
523 // The timestep currently being read.
527 void SetNumberOfTimeSteps(int num);
528 // buffer for reading timestep from the XML file the length is of
529 // NumberOfTimeSteps and therefore is always long enough
531 // Store the range of time steps
533
534 // Now we need to save what was the last time read for each kind of
535 // data to avoid rereading it that is to say we need a var for
536 // e.g. PointData/CellData/Points/Cells...
537 // See SubClass for details with member vars like PointsTimeStep/PointsOffset
538
539 // Helper function useful to know if a timestep is found in an array of timestep
540 static int IsTimeStepInArray(int timestep, int* timesteps, int length);
541
544
545 // Flag for whether DataProgressCallback should actually update
546 // progress.
548
550
551 /*
552 * Populate the output's FieldData with the file's FieldData tags content
553 */
555
556private:
557 int OpenVTKStream();
558
559 // The stream used to read the input if it is in a resource stream
561
562 bool ReadFromInputStream = false;
563
564 // The stream used to read the input if it is in a file.
565 istream* FileStream;
566 // The stream used to read the input if it is in a string.
567 std::istringstream* StringStream;
568
569 // Used when converting vtkResourceStream into istream
570 std::unique_ptr<std::streambuf> Streambuf;
571 std::unique_ptr<std::istream> StreamBuffer;
572
573 int TimeStepWasReadOnce;
574
575 int FileMajorVersion;
576 int FileMinorVersion;
577
578 vtkDataObject* CurrentOutput;
579 vtkInformation* CurrentOutputInformation;
580
581 vtkXMLReader(const vtkXMLReader&) = delete;
582 void operator=(const vtkXMLReader&) = delete;
583
584 vtkCommand* ReaderErrorObserver;
585 vtkCommand* ParserErrorObserver;
586};
587
588VTK_ABI_NAMESPACE_END
589#endif
Abstract superclass for all arrays.
supports function callbacks
dynamic, self-adjusting array of char
superclass for callback/observer methods
Definition vtkCommand.h:386
Store on/off settings for data arrays, etc.
general representation of visualization data
represent and manipulate attribute data in a dataset
abstract class to specify dataset behavior
Definition vtkDataSet.h:56
a simple class to control print indentation
Definition vtkIndent.h:29
Store zero or more vtkInformation instances.
Store vtkAlgorithm input/output information.
Abstract class used for custom streams.
Hold a reference to a vtkObjectBase instance.
a vtkAbstractArray subclass for strings
record modification and/or execution time
Represents an XML element and those nested inside.
Used by vtkXMLReader to parse VTK XML files.
vtkCharArray * InputArray
virtual int ReadArrayTuples(vtkXMLDataElement *da, vtkIdType arrayTupleIndex, vtkAbstractArray *array, vtkIdType startTupleIndex, vtkIdType numTuples, FieldType type=OTHER)
Read an Array values starting at the given tuple index and up to numTuples taking into account the nu...
vtkXMLDataElement * FieldDataElement
vtkCallbackCommand * SelectionObserver
char ** CreateStringArray(int numStrings)
Utility methods for subclasses.
virtual void SetProgressRange(const float range[2], int curStep, int numSteps)
virtual void ConvertGhostLevelsToGhostType(FieldType, vtkAbstractArray *, vtkIdType, vtkIdType)
int GetColumnArrayStatus(const char *name)
Get/Set whether the point, cell, column or time array with the given name is to be read.
virtual int CanReadFileVersion(int major, int minor)
Test if the reader can read a file with the given version number.
void SetInputString(const std::string &input)
Enable reading from an InputString instead of the default, a file.
virtual void GetProgressRange(float *range)
virtual void DestroyXMLParser()
Internal utility methods.
int CellDataArrayIsEnabled(vtkXMLDataElement *eCDA)
Check whether the given array element is an enabled array.
void SetColumnArrayStatus(const char *name, int status)
Get/Set whether the point, cell, column or time array with the given name is to be read.
virtual int ReadArrayValues(vtkXMLDataElement *da, vtkIdType arrayIndex, vtkAbstractArray *array, vtkIdType startIndex, vtkIdType numValues, FieldType type=OTHER)
Read an Array values starting at the given index and up to numValues.
void SetReaderErrorObserver(vtkCommand *)
Set/get the ErrorObserver for the internal reader This is useful for applications that want to catch ...
virtual void SetupOutputInformation(vtkInformation *outInfo)
Setup the output's information.
const char * GetCellArrayName(int index)
Get the name of the point, cell, column or time array with the given index in the input.
int IntersectExtents(VTK_FUTURE_CONST int extent1[6], VTK_FUTURE_CONST int extent2[6], int result[6])
Utility methods for subclasses.
vtkDataArraySelection * CellDataArraySelection
virtual void SetupOutputData()
Setup the output's data with allocation.
int CreateInformationKey(vtkXMLDataElement *eInfoKey, vtkInformation *info)
Create a vtkInformationKey from its corresponding XML representation.
vtkMTimeType GetMTime() override
Overridden to take into account mtime from the internal vtkResourceStream.
void SetDataArraySelections(vtkXMLDataElement *eDSA, vtkDataArraySelection *sel)
Setup the data array selections for the input's set of arrays.
void SetParserErrorObserver(vtkCommand *)
Set/get the ErrorObserver for the internal xml parser This is useful for applications that want to ca...
void ComputePointIncrements(VTK_FUTURE_CONST int extent[6], vtkIdType *increments)
Utility methods for subclasses.
virtual void SetupEmptyOutput()=0
Setup the output with no data available.
int GetNumberOfTimeDataArrays() const
Getters for time data array candidates.
virtual void SqueezeOutputArrays(vtkDataObject *)
Give concrete classes an option to squeeze any output arrays at the end of RequestData.
virtual void CopyOutputInformation(vtkInformation *outInfo, int port)
int GetNumberOfPointArrays()
Get the number of point, cell or column arrays available in the input.
virtual void CreateXMLParser()
Internal utility methods.
vtkSmartPointer< vtkDataArray > TimeDataArray
Populated in ReadXMLInformation from the field data for the array chosen using ActiveTimeDataArrayNam...
vtkResourceStream * GetStream()
Specify resource stream to read from When both Stream and Filename or InputString are set,...
virtual void CloseStream()
Internal utility methods.
int CanReadFileVersionString(const char *version)
Internal utility methods.
void ReadFieldData()
float ProgressRange[2]
const char * GetColumnArrayName(int index)
Get the name of the point, cell, column or time array with the given index in the input.
vtkTypeBool ReadFromInputString
void SetupCompressor(const char *type)
Internal utility methods.
vtkInformation * GetCurrentOutputInformation()
vtkDataArraySelection * ColumnArraySelection
std::istream * Stream
vtkXMLDataParser * XMLParser
virtual const char * GetDataSetName()=0
Get the name of the data set being read.
vtkXMLDataParser * GetXMLParser()
Returns the internal XML parser.
void ComputeCellIncrements(VTK_FUTURE_CONST int extent[6], vtkIdType *increments)
Utility methods for subclasses.
virtual void SetInputArray(vtkCharArray *)
Specify the vtkCharArray to be used when reading from a string.
const char * GetPointArrayName(int index)
Get the name of the point, cell, column or time array with the given index in the input.
vtkIdType GetStartTuple(VTK_FUTURE_CONST int extent[6], vtkIdType *increments, int i, int j, int k)
Utility methods for subclasses.
virtual int ReadXMLInformation()
Pipeline execution methods to be defined by subclass.
vtkAbstractArray * CreateArray(vtkXMLDataElement *da)
Create a vtkAbstractArray from its corresponding XML representation.
int GetNumberOfColumnArrays()
Get the number of point, cell or column arrays available in the input.
void SetInputString(const char *in, int len)
Enable reading from an InputString instead of the default, a file.
void ReadAttributeIndices(vtkXMLDataElement *eDSA, vtkDataSetAttributes *dsa)
Utility methods for subclasses.
virtual int CanReadFile(const char *name)
Return 1 if, after a quick check of file header, it looks like the provided file or stream can be rea...
int PointDataArrayIsEnabled(vtkXMLDataElement *ePDA)
Check whether the given array element is an enabled array.
vtkDataSet * GetOutputAsDataSet()
Get the output as a vtkDataSet pointer.
virtual void CloseVTKFile()
Internal utility methods.
virtual int OpenVTKFile()
Internal utility methods.
void SetInputString(const char *in)
Specify the InputString for use when reading from a character array.
vtkTimeStamp ReadMTime
void ComputeCellDimensions(VTK_FUTURE_CONST int extent[6], int *dimensions)
Utility methods for subclasses.
void SetNumberOfTimeSteps(int num)
virtual int RequestInformation(vtkInformation *request, vtkInformationVector **inputVector, vtkInformationVector *outputVector)
static void SelectionModifiedCallback(vtkObject *caller, unsigned long eid, void *clientdata, void *calldata)
Callback registered with the SelectionObserver.
static int IsTimeStepInArray(int timestep, int *timesteps, int length)
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
int GetNumberOfCellArrays()
Get the number of point, cell or column arrays available in the input.
void MarkIdTypeArrays(vtkXMLDataElement *da)
XML files have not consistently saved out adequate meta-data in past to correctly create vtkIdTypeArr...
~vtkXMLReader() override
virtual int CanReadFileWithDataType(const char *dsname)
This method is used by CanReadFile() to check if the reader can read an XML with the primary element ...
char * ActiveTimeDataArrayName
Name of the field-data array used to determine the time for the dataset being read.
virtual int ReadVTKFile(vtkXMLDataElement *eVTKFile)
Read the top-level element from the file.
virtual int OpenVTKString()
Internal utility methods.
virtual int ReadPrimaryElement(vtkXMLDataElement *ePrimary)
Read the primary element from the file.
void SetBinaryInputString(const char *, int len)
Enable reading from an InputString instead of the default, a file.
vtkGetFilePathMacro(FileName)
Get/Set the name of the input file.
int TimeStepRange[2]
int GetLocalDataType(vtkXMLDataElement *da, int datatype)
If the IdType argument is present in the provided XMLDataElement and the provided dataType has the sa...
void SetStream(vtkResourceStream *stream)
Specify resource stream to read from When both Stream and Filename or InputString are set,...
bool ReadInformation(vtkXMLDataElement *infoRoot, vtkInformation *info)
Populates the info object with the InformationKey children in infoRoot.
vtkTypeBool ProcessRequest(vtkInformation *request, vtkInformationVector **inputVector, vtkInformationVector *outputVector) override
Upstream/Downstream requests form the generalized interface through which executives invoke a algorit...
int GetCellArrayStatus(const char *name)
Get/Set whether the point, cell, column or time array with the given name is to be read.
vtkSetFilePathMacro(FileName)
Get/Set the name of the input file.
vtkDataObject * GetCurrentOutput()
int GetPointArrayStatus(const char *name)
Get/Set whether the point, cell, column or time array with the given name is to be read.
const char * GetTimeDataArray(int idx) const
Getters for time data array candidates.
virtual void UpdateProgressDiscrete(float progress)
virtual void ReadXMLData()
Pipeline execution methods to be defined by subclass.
void ComputePointDimensions(VTK_FUTURE_CONST int extent[6], int *dimensions)
Utility methods for subclasses.
virtual int OpenStream()
Internal utility methods.
vtkStringArray * TimeDataStringArray
virtual int RequestData(vtkInformation *request, vtkInformationVector **inputVector, vtkInformationVector *outputVector)
virtual void SetProgressRange(const float range[2], int curStep, const float *fractions)
void DestroyStringArray(int numStrings, char **strings)
Utility methods for subclasses.
void SetCellArrayStatus(const char *name, int status)
Get/Set whether the point, cell, column or time array with the given name is to be read.
bool CanReadFile(vtkResourceStream *stream)
Return 1 if, after a quick check of file header, it looks like the provided file or stream can be rea...
virtual void CloseVTKString()
Internal utility methods.
void SetPointArrayStatus(const char *name, int status)
Get/Set whether the point, cell, column or time array with the given name is to be read.
std::string InputString
vtkDataArraySelection * PointDataArraySelection
vtkDataSet * GetOutputAsDataSet(int index)
Get the output as a vtkDataSet pointer.
int SetFieldDataInfo(vtkXMLDataElement *eDSA, int association, vtkIdType numTuples, vtkInformationVector *(&infoVector))
virtual int RequestDataObject(vtkInformation *request, vtkInformationVector **inputVector, vtkInformationVector *outputVector)
int vtkTypeBool
Definition vtkABI.h:64
#define vtkDataArray
int vtkIdType
Definition vtkType.h:363
vtkTypeUInt32 vtkMTimeType
Definition vtkType.h:318
#define VTK_FILEPATH