1 /*=========================================================================
2
3 Program: Visualization Toolkit
4 Module: vtkMultiBlockFromTimeSeriesFilter.cxx
5
6 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7 All rights reserved.
8 See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9
10 This software is distributed WITHOUT ANY WARRANTY; without even
11 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12 PURPOSE. See the above copyright notice for more information.
13
14 =========================================================================*/
15
16 // Hide VTK_DEPRECATED_IN_9_1_0() warnings for this class.
17 #define VTK_DEPRECATION_LEVEL 0
18
19 #include "vtkMultiBlockFromTimeSeriesFilter.h"
20
21 #include "vtkInformation.h"
22 #include "vtkInformationVector.h"
23 #include "vtkMultiBlockDataSet.h"
24 #include "vtkObjectFactory.h"
25 #include "vtkStreamingDemandDrivenPipeline.h"
26
27 vtkStandardNewMacro(vtkMultiBlockFromTimeSeriesFilter);
28
vtkMultiBlockFromTimeSeriesFilter()29 vtkMultiBlockFromTimeSeriesFilter::vtkMultiBlockFromTimeSeriesFilter()
30 {
31 this->UpdateTimeIndex = 0;
32 }
33
34 vtkMultiBlockFromTimeSeriesFilter::~vtkMultiBlockFromTimeSeriesFilter() = default;
35
FillInputPortInformation(int,vtkInformation * info)36 int vtkMultiBlockFromTimeSeriesFilter::FillInputPortInformation(int, vtkInformation* info)
37 {
38 info->Set(vtkAlgorithm::INPUT_REQUIRED_DATA_TYPE(), "vtkDataObject");
39 return 1;
40 }
41
RequestInformation(vtkInformation * vtkNotUsed (request),vtkInformationVector ** inInfo,vtkInformationVector * outInfoVec)42 int vtkMultiBlockFromTimeSeriesFilter::RequestInformation(vtkInformation* vtkNotUsed(request),
43 vtkInformationVector** inInfo, vtkInformationVector* outInfoVec)
44 {
45 this->UpdateTimeIndex = 0;
46 vtkInformation* info = inInfo[0]->GetInformationObject(0);
47 int len = info->Length(vtkStreamingDemandDrivenPipeline::TIME_STEPS());
48 double* timeSteps = info->Get(vtkStreamingDemandDrivenPipeline::TIME_STEPS());
49 this->TimeSteps.resize(len);
50 std::copy(timeSteps, timeSteps + len, this->TimeSteps.begin());
51 this->TempDataset = vtkSmartPointer<vtkMultiBlockDataSet>::New();
52 this->TempDataset->SetNumberOfBlocks(len);
53
54 vtkInformation* outInfo = outInfoVec->GetInformationObject(0);
55 outInfo->Remove(vtkStreamingDemandDrivenPipeline::TIME_STEPS());
56 outInfo->Remove(vtkStreamingDemandDrivenPipeline::TIME_RANGE());
57
58 return 1;
59 }
60
RequestUpdateExtent(vtkInformation * vtkNotUsed (request),vtkInformationVector ** inInfo,vtkInformationVector * vtkNotUsed (outInfo))61 int vtkMultiBlockFromTimeSeriesFilter::RequestUpdateExtent(vtkInformation* vtkNotUsed(request),
62 vtkInformationVector** inInfo, vtkInformationVector* vtkNotUsed(outInfo))
63 {
64 if (this->TimeSteps.size() > static_cast<size_t>(this->UpdateTimeIndex))
65 {
66 vtkInformation* info = inInfo[0]->GetInformationObject(0);
67 info->Set(
68 vtkStreamingDemandDrivenPipeline::UPDATE_TIME_STEP(), this->TimeSteps[this->UpdateTimeIndex]);
69 }
70 return 1;
71 }
72
RequestData(vtkInformation * request,vtkInformationVector ** inInfo,vtkInformationVector * outInfo)73 int vtkMultiBlockFromTimeSeriesFilter::RequestData(
74 vtkInformation* request, vtkInformationVector** inInfo, vtkInformationVector* outInfo)
75 {
76 vtkInformation* info = inInfo[0]->GetInformationObject(0);
77 vtkDataObject* data = vtkDataObject::GetData(info);
78 vtkSmartPointer<vtkDataObject> clone = vtkSmartPointer<vtkDataObject>::Take(data->NewInstance());
79 clone->ShallowCopy(data);
80 this->TempDataset->SetBlock(this->UpdateTimeIndex, clone);
81 if (this->UpdateTimeIndex < static_cast<vtkTypeInt64>(this->TimeSteps.size()) - 1)
82 {
83 this->UpdateTimeIndex++;
84 request->Set(vtkStreamingDemandDrivenPipeline::CONTINUE_EXECUTING(), 1);
85 }
86 else
87 {
88 vtkMultiBlockDataSet* output = vtkMultiBlockDataSet::GetData(outInfo);
89 output->ShallowCopy(this->TempDataset);
90 for (unsigned i = 0; i < this->TempDataset->GetNumberOfBlocks(); ++i)
91 {
92 this->TempDataset->SetBlock(i, nullptr);
93 }
94 request->Remove(vtkStreamingDemandDrivenPipeline::CONTINUE_EXECUTING());
95 }
96 return 1;
97 }
98
PrintSelf(ostream & os,vtkIndent indent)99 void vtkMultiBlockFromTimeSeriesFilter::PrintSelf(ostream& os, vtkIndent indent)
100 {
101 this->Superclass::PrintSelf(os, indent);
102 }
103