1 #include "vtkFileSeriesGroupReader.h"
3 #include <vtkInformation.h>
4 #include <vtkInformationVector.h>
5 #include <vtkMultiBlockDataSet.h>
6 #include <vtkObjectFactory.h>
7 #include <vtkSmartPointer.h>
8 #include <vtkStreamingDemandDrivenPipeline.h>
13 vtkStandardNewMacro(vtkFileSeriesGroupReader);
15 //=============================================================================
16 struct vtkFileSeriesGroupReaderInternals
18 std::vector<std::string> FileNames;
21 //=============================================================================
22 vtkFileSeriesGroupReader::vtkFileSeriesGroupReader()
23 : Internals(new vtkFileSeriesGroupReaderInternals())
25 this->SetNumberOfInputPorts(0);
26 this->SetNumberOfOutputPorts(1);
29 //-----------------------------------------------------------------------------
30 vtkFileSeriesGroupReader::~vtkFileSeriesGroupReader() = default;
32 //----------------------------------------------------------------------------
33 void vtkFileSeriesGroupReader::AddFileName(const char* name)
35 // Make sure the reader always has a filename set
36 this->ReaderSetFileName(name);
38 this->AddFileNameInternal(name);
42 //----------------------------------------------------------------------------
43 void vtkFileSeriesGroupReader::RemoveAllFileNames()
45 this->RemoveAllFileNamesInternal();
49 //----------------------------------------------------------------------------
50 void vtkFileSeriesGroupReader::RemoveAllFileNamesInternal()
52 this->Internals->FileNames.clear();
55 //----------------------------------------------------------------------------
56 void vtkFileSeriesGroupReader::AddFileNameInternal(const char* name)
58 this->Internals->FileNames.emplace_back(name);
61 //----------------------------------------------------------------------------
62 unsigned int vtkFileSeriesGroupReader::GetNumberOfFileNames()
64 return static_cast<unsigned int>(this->Internals->FileNames.size());
67 //----------------------------------------------------------------------------
68 const char* vtkFileSeriesGroupReader::GetFileName(unsigned int idx)
70 if (idx >= this->Internals->FileNames.size())
74 return this->Internals->FileNames[idx].c_str();
77 //----------------------------------------------------------------------------
78 int vtkFileSeriesGroupReader::CanReadFile(const char* filename)
85 return this->ReaderCanReadFile(filename);
88 //----------------------------------------------------------------------------
89 int vtkFileSeriesGroupReader::RequestInformation(
90 vtkInformation* request, vtkInformationVector** inputVector, vtkInformationVector* outputVector)
92 return this->Reader->ProcessRequest(request, inputVector, outputVector);
95 //----------------------------------------------------------------------------
96 int vtkFileSeriesGroupReader::RequestData(vtkInformation* vtkNotUsed(request),
97 vtkInformationVector** vtkNotUsed(inputVector), vtkInformationVector* outputVector)
99 auto output = vtkMultiBlockDataSet::GetData(outputVector, 0);
100 output->SetNumberOfBlocks(this->GetNumberOfFileNames());
102 vtkInformation* info = outputVector->GetInformationObject(0);
103 double time = info->Get(vtkStreamingDemandDrivenPipeline::UPDATE_TIME_STEP());
105 for (unsigned int i = 0; i < this->GetNumberOfFileNames(); i++)
107 this->ReaderSetFileName(this->GetFileName(i));
108 this->Reader->UpdateTimeStep(time);
109 vtkDataObject* outputReader = this->Reader->GetOutputDataObject(0);
110 vtkSmartPointer<vtkDataObject> outputLeaf = vtkSmartPointer<vtkDataObject>::Take(outputReader->NewInstance());
111 outputLeaf->DeepCopy(outputReader);
112 output->SetBlock(i, outputLeaf);
118 //------------------------------------------------------------------------------
119 int vtkFileSeriesGroupReader::FillOutputPortInformation(
120 int vtkNotUsed(port), vtkInformation* info)
122 info->Set(vtkDataObject::DATA_TYPE_NAME(), "vtkMultiBlockDataSet");
126 //-----------------------------------------------------------------------------
127 void vtkFileSeriesGroupReader::PrintSelf(ostream& os, vtkIndent indent)
129 this->Superclass::PrintSelf(os, indent);
131 os << indent << "MetaFileName: " << (this->_MetaFileName ? this->_MetaFileName : "(none)")