VTK  9.5.2
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
14
15#ifndef vtkXMLReader_h
16#define vtkXMLReader_h
17
18#include "vtkAlgorithm.h"
19#include "vtkDeprecation.h" // For VTK_DEPRECATED_IN_9_5_0
20#include "vtkIOXMLModule.h" // For export macro
21#include "vtkSmartPointer.h" // for vtkSmartPointer.
22
23#include <string> // for std::string
24
25VTK_ABI_NAMESPACE_BEGIN
28class vtkCharArray;
29class vtkCommand;
30class vtkDataArray;
32class vtkDataSet;
37class vtkInformation;
38class vtkStringArray;
39
40class VTKIOXML_EXPORT vtkXMLReader : public vtkAlgorithm
41{
42public:
43 vtkTypeMacro(vtkXMLReader, vtkAlgorithm);
44 void PrintSelf(ostream& os, vtkIndent indent) override;
45
52
54
60
62
69
75 void SetInputString(const char* in);
76 void SetInputString(const char* in, int len);
77 void SetBinaryInputString(const char*, int len);
78 void SetInputString(const std::string& input)
79 {
80 this->SetBinaryInputString(input.c_str(), static_cast<int>(input.length()));
81 }
82
83
85
95
103 virtual int CanReadFile(VTK_FILEPATH const char* name);
104
106
112
114
122
124
131
133
137 const char* GetTimeDataArray(int idx) const;
140
142
148 vtkGetStringMacro(ActiveTimeDataArrayName);
149 vtkSetStringMacro(ActiveTimeDataArrayName);
151
153
157 const char* GetPointArrayName(int index);
158 const char* GetCellArrayName(int index);
159 const char* GetColumnArrayName(int index);
161
163
167 int GetPointArrayStatus(const char* name);
168 int GetCellArrayStatus(const char* name);
169 void SetPointArrayStatus(const char* name, int status);
170 void SetCellArrayStatus(const char* name, int status);
171 int GetColumnArrayStatus(const char* name);
172 void SetColumnArrayStatus(const char* name, int status);
174
175 // For the specified port, copy the information this reader sets up in
176 // SetupOutputInformation to outInfo
177 virtual void CopyOutputInformation(vtkInformation* vtkNotUsed(outInfo), int vtkNotUsed(port)) {}
178
180
183 vtkSetMacro(TimeStep, int);
184 vtkGetMacro(TimeStep, int);
186
187 vtkGetMacro(NumberOfTimeSteps, int);
189
192 vtkGetVector2Macro(TimeStepRange, int);
193 vtkSetVector2Macro(TimeStepRange, int);
195
201
203 vtkInformationVector* outputVector) override;
204
206
211 vtkGetObjectMacro(ReaderErrorObserver, vtkCommand);
213
215
220 vtkGetObjectMacro(ParserErrorObserver, vtkCommand);
222
223protected:
225 ~vtkXMLReader() override;
226
228
233 virtual int ReadXMLInformation();
234 virtual void ReadXMLData();
236
240 virtual const char* GetDataSetName() = 0;
241
245 virtual int CanReadFileVersion(int major, int minor);
246
250 virtual void SetupEmptyOutput() = 0;
251
255 virtual void SetupOutputInformation(vtkInformation* vtkNotUsed(outInfo)) {}
256
260 virtual void SetupOutputData();
261
266 virtual int ReadPrimaryElement(vtkXMLDataElement* ePrimary);
267
272 virtual int ReadVTKFile(vtkXMLDataElement* eVTKFile);
273
279 int GetLocalDataType(vtkXMLDataElement* da, int datatype);
280
286
292
298
300
303 virtual int OpenStream();
304 virtual void CloseStream();
305 virtual int OpenVTKFile();
306 virtual void CloseVTKFile();
307 virtual int OpenVTKString();
308 virtual void CloseVTKString();
309 virtual void CreateXMLParser();
310 virtual void DestroyXMLParser();
311 void SetupCompressor(const char* type);
312 int CanReadFileVersionString(const char* version);
314
320 virtual int CanReadFileWithDataType(const char* dsname);
321
325 vtkGetMacro(FileMajorVersion, int);
326
330 vtkGetMacro(FileMinorVersion, int);
331
333
336 int IntersectExtents(int* extent1, int* extent2, int* result);
337 VTK_DEPRECATED_IN_9_5_0("Use std::min instead")
338 int Min(int a, int b);
339 VTK_DEPRECATED_IN_9_5_0("Use std::max instead")
340 int Max(int a, int b);
341 void ComputePointDimensions(int* extent, int* dimensions);
342 void ComputePointIncrements(int* extent, vtkIdType* increments);
343 void ComputeCellDimensions(int* extent, int* dimensions);
344 void ComputeCellIncrements(int* extent, vtkIdType* increments);
345 vtkIdType GetStartTuple(int* extent, vtkIdType* increments, int i, int j, int k);
347 char** CreateStringArray(int numStrings);
348 void DestroyStringArray(int numStrings, char** strings);
350
357 virtual int ReadArrayValues(vtkXMLDataElement* da, vtkIdType arrayIndex, vtkAbstractArray* array,
358 vtkIdType startIndex, vtkIdType numValues, FieldType type = OTHER);
359
368 virtual int ReadArrayTuples(vtkXMLDataElement* da, vtkIdType arrayTupleIndex,
369 vtkAbstractArray* array, vtkIdType startTupleIndex, vtkIdType numTuples,
370 FieldType type = OTHER);
371
376
377 int SetFieldDataInfo(vtkXMLDataElement* eDSA, int association, vtkIdType numTuples,
378 vtkInformationVector*(&infoVector));
379
381
387
392 vtkObject* caller, unsigned long eid, void* clientdata, void* calldata);
393
399
410
411 // The vtkXMLDataParser instance used to hide XML reading details.
413
414 // The FieldData element representation.
416
417 // The input file's name.
418 char* FileName;
419
420 // The stream used to read the input.
421 istream* Stream;
422
423 // Whether this object is reading from a string or a file.
424 // Default is 0: read from file.
426
427 // The input string.
428 std::string InputString;
429
430 // The input array. Keeps a low memory footprint by sourcing StringStream from contents of this
431 // array
433
434 // The array selections.
439
445
451
452 // The observer to modify this object when the array selections are
453 // modified.
455
456 // Whether there was an error reading the file in RequestInformation.
458
459 // Whether there was an error reading the file in RequestData.
461
462 // incrementally fine-tuned progress updates.
463 virtual void GetProgressRange(float* range);
464 virtual void SetProgressRange(const float range[2], int curStep, int numSteps);
465 virtual void SetProgressRange(const float range[2], int curStep, const float* fractions);
466 virtual void UpdateProgressDiscrete(float progress);
468
469 virtual int RequestData(vtkInformation* request, vtkInformationVector** inputVector,
470 vtkInformationVector* outputVector);
471 virtual int RequestDataObject(vtkInformation* vtkNotUsed(request),
472 vtkInformationVector** vtkNotUsed(inputVector), vtkInformationVector* vtkNotUsed(outputVector))
473 {
474 return 1;
475 }
476 virtual int RequestInformation(vtkInformation* request, vtkInformationVector** inputVector,
477 vtkInformationVector* outputVector);
479
480 // Whether there was an error reading the XML.
482
483 // For structured data keep track of dimensions empty of cells. For
484 // unstructured data these are always zero. This is used to support
485 // 1-D and 2-D cell data.
486 int AxesEmpty[3];
487
488 // The timestep currently being read.
492 void SetNumberOfTimeSteps(int num);
493 // buffer for reading timestep from the XML file the length is of
494 // NumberOfTimeSteps and therefore is always long enough
496 // Store the range of time steps
498
499 // Now we need to save what was the last time read for each kind of
500 // data to avoid rereading it that is to say we need a var for
501 // e.g. PointData/CellData/Points/Cells...
502 // See SubClass for details with member vars like PointsTimeStep/PointsOffset
503
504 // Helper function useful to know if a timestep is found in an array of timestep
505 static int IsTimeStepInArray(int timestep, int* timesteps, int length);
506
509
510 // Flag for whether DataProgressCallback should actually update
511 // progress.
513
515
516 /*
517 * Populate the output's FieldData with the file's FieldData tags content
518 */
520
521private:
522 // The stream used to read the input if it is in a file.
523 istream* FileStream;
524 // The stream used to read the input if it is in a string.
525 std::istringstream* StringStream;
526 int TimeStepWasReadOnce;
527
528 int FileMajorVersion;
529 int FileMinorVersion;
530
531 vtkDataObject* CurrentOutput;
532 vtkInformation* CurrentOutputInformation;
533
534 vtkXMLReader(const vtkXMLReader&) = delete;
535 void operator=(const vtkXMLReader&) = delete;
536
537 vtkCommand* ReaderErrorObserver;
538 vtkCommand* ParserErrorObserver;
539};
540
541VTK_ABI_NAMESPACE_END
542#endif
Abstract superclass for all arrays.
Superclass for all sources, filters, and sinks in VTK.
supports function callbacks
dynamic, self-adjusting array of char
superclass for callback/observer methods
Definition vtkCommand.h:384
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.
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.
istream * Stream
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 ...
const char * GetCellArrayName(int index)
Get the name of the point, cell, column or time array with the given index in the input.
vtkDataArraySelection * CellDataArraySelection
virtual void SetupOutputData()
Setup the output's data with allocation.
void ComputeCellIncrements(int *extent, vtkIdType *increments)
Utility methods for subclasses.
int CreateInformationKey(vtkXMLDataElement *eInfoKey, vtkInformation *info)
Create a vtkInformationKey from its corresponding XML representation.
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...
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.
int GetNumberOfPointArrays()
Get the number of point, cell or column arrays available in the input.
int Max(int a, int b)
Utility methods for subclasses.
virtual void CreateXMLParser()
Internal utility methods.
vtkSmartPointer< vtkDataArray > TimeDataArray
Populated in ReadXMLInformation from the field data for the array chosen using ActiveTimeDataArrayNam...
virtual void CloseStream()
Internal utility methods.
int CanReadFileVersionString(const char *version)
Internal utility methods.
void ReadFieldData()
float ProgressRange[2]
virtual void SetupOutputInformation(vtkInformation *vtkNotUsed(outInfo))
Setup the output's information.
vtkIdType GetStartTuple(int *extent, vtkIdType *increments, int i, int j, int k)
Utility methods for subclasses.
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
vtkXMLDataParser * XMLParser
virtual const char * GetDataSetName()=0
Get the name of the data set being read.
vtkXMLDataParser * GetXMLParser()
Returns the internal XML parser.
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.
void ComputePointIncrements(int *extent, vtkIdType *increments)
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.
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(int *extent, int *dimensions)
Utility methods for subclasses.
virtual int CanReadFile(VTK_FILEPATH const char *name)
Test whether the file (type) with the given name can be read by this reader.
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)
virtual int RequestDataObject(vtkInformation *vtkNotUsed(request), vtkInformationVector **vtkNotUsed(inputVector), vtkInformationVector *vtkNotUsed(outputVector))
void ComputePointDimensions(int *extent, int *dimensions)
Utility methods for subclasses.
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 ...
int IntersectExtents(int *extent1, int *extent2, int *result)
Utility methods for subclasses.
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...
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.
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.
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
virtual void CopyOutputInformation(vtkInformation *vtkNotUsed(outInfo), int vtkNotUsed(port))
vtkDataSet * GetOutputAsDataSet(int index)
Get the output as a vtkDataSet pointer.
int SetFieldDataInfo(vtkXMLDataElement *eDSA, int association, vtkIdType numTuples, vtkInformationVector *(&infoVector))
int Min(int a, int b)
Utility methods for subclasses.
int vtkTypeBool
Definition vtkABI.h:64
#define vtkDataArray
#define VTK_DEPRECATED_IN_9_5_0(reason)
int vtkIdType
Definition vtkType.h:332
#define VTK_FILEPATH