forked from Kitware/VTK
-
Notifications
You must be signed in to change notification settings - Fork 0
/
vtkXMLPartitionedDataSetCollectionReader.cxx
124 lines (110 loc) · 3.91 KB
/
vtkXMLPartitionedDataSetCollectionReader.cxx
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
/*=========================================================================
Program: ParaView
Module: vtkXMLPartitionedDataSetCollectionReader.cxx
Copyright (c) Kitware, Inc.
All rights reserved.
See Copyright.txt or http://www.paraview.org/HTML/Copyright.html 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.
=========================================================================*/
#include "vtkXMLPartitionedDataSetCollectionReader.h"
#include "vtkCompositeDataSet.h"
#include "vtkCompositeDataPipeline.h"
#include "vtkDataSet.h"
#include "vtkInformation.h"
#include "vtkInformationVector.h"
#include "vtkPartitionedDataSetCollection.h"
#include "vtkPartitionedDataSet.h"
#include "vtkObjectFactory.h"
#include "vtkSmartPointer.h"
#include "vtkXMLDataElement.h"
vtkStandardNewMacro(vtkXMLPartitionedDataSetCollectionReader);
//----------------------------------------------------------------------------
vtkXMLPartitionedDataSetCollectionReader::vtkXMLPartitionedDataSetCollectionReader()
{
}
//----------------------------------------------------------------------------
vtkXMLPartitionedDataSetCollectionReader::~vtkXMLPartitionedDataSetCollectionReader()
{
}
//----------------------------------------------------------------------------
void vtkXMLPartitionedDataSetCollectionReader::PrintSelf(ostream& os, vtkIndent indent)
{
this->Superclass::PrintSelf(os, indent);
}
//----------------------------------------------------------------------------
int vtkXMLPartitionedDataSetCollectionReader::FillOutputPortInformation(
int vtkNotUsed(port), vtkInformation* info)
{
info->Set(vtkDataObject::DATA_TYPE_NAME(), "vtkPartitionedDataSetCollection");
return 1;
}
//----------------------------------------------------------------------------
const char* vtkXMLPartitionedDataSetCollectionReader::GetDataSetName()
{
return "vtkPartitionedDataSetCollection";
}
//----------------------------------------------------------------------------
void vtkXMLPartitionedDataSetCollectionReader::ReadComposite(vtkXMLDataElement* element,
vtkCompositeDataSet* composite, const char* filePath,
unsigned int &dataSetIndex)
{
vtkPartitionedDataSetCollection* col = vtkPartitionedDataSetCollection::SafeDownCast(composite);
vtkPartitionedDataSet* ds = vtkPartitionedDataSet::SafeDownCast(composite);
if (!col && !ds)
{
vtkErrorMacro("Unsupported composite dataset.");
return;
}
unsigned int maxElems = element->GetNumberOfNestedElements();
for (unsigned int cc=0; cc < maxElems; ++cc)
{
vtkXMLDataElement* childXML = element->GetNestedElement(cc);
if (!childXML || !childXML->GetName())
{
continue;
}
int index = 0;
if (!childXML->GetScalarAttribute("index", index))
// if index not in the structure file, then
// set up to add at the end
{
if (col)
{
index = col->GetNumberOfPartitionedDataSets();
}
else if (ds)
{
index = ds->GetNumberOfPartitions();
}
}
// child is a leaf node, read and insert.
const char* tagName = childXML->GetName();
if (strcmp(tagName, "DataSet") == 0)
{
vtkSmartPointer<vtkDataObject> childDS;
if (this->ShouldReadDataSet(dataSetIndex))
{
// Read
childDS.TakeReference(this->ReadDataObject(childXML, filePath));
}
// insert
ds->SetPartition(index, childDS);
dataSetIndex++;
}
else if (col != nullptr
&& strcmp(tagName, "Partitions") == 0)
{
vtkPartitionedDataSet* childDS = vtkPartitionedDataSet::New();
this->ReadComposite(childXML, childDS, filePath, dataSetIndex);
col->SetPartitionedDataSet(index, childDS);
childDS->Delete();
}
else
{
vtkErrorMacro("Syntax error in file.");
return;
}
}
}