1 /*=========================================================================
2 
3   Program:   Visualization Toolkit
4   Module:    vtkPartitionedDataSet.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 #include "vtkPartitionedDataSet.h"
16 
17 #include "vtkDataSet.h"
18 #include "vtkInformation.h"
19 #include "vtkInformationVector.h"
20 #include "vtkObjectFactory.h"
21 
22 vtkStandardNewMacro(vtkPartitionedDataSet);
23 //------------------------------------------------------------------------------
24 vtkPartitionedDataSet::vtkPartitionedDataSet() = default;
25 
26 //------------------------------------------------------------------------------
27 vtkPartitionedDataSet::~vtkPartitionedDataSet() = default;
28 
29 //------------------------------------------------------------------------------
GetData(vtkInformation * info)30 vtkPartitionedDataSet* vtkPartitionedDataSet::GetData(vtkInformation* info)
31 {
32   return info ? vtkPartitionedDataSet::SafeDownCast(info->Get(DATA_OBJECT())) : nullptr;
33 }
34 
35 //------------------------------------------------------------------------------
GetData(vtkInformationVector * v,int i)36 vtkPartitionedDataSet* vtkPartitionedDataSet::GetData(vtkInformationVector* v, int i)
37 {
38   return vtkPartitionedDataSet::GetData(v->GetInformationObject(i));
39 }
40 
41 //------------------------------------------------------------------------------
SetNumberOfPartitions(unsigned int numPartitions)42 void vtkPartitionedDataSet::SetNumberOfPartitions(unsigned int numPartitions)
43 {
44   this->Superclass::SetNumberOfChildren(numPartitions);
45 }
46 
47 //------------------------------------------------------------------------------
GetNumberOfPartitions()48 unsigned int vtkPartitionedDataSet::GetNumberOfPartitions()
49 {
50   return this->Superclass::GetNumberOfChildren();
51 }
52 
53 //------------------------------------------------------------------------------
GetPartition(unsigned int idx)54 vtkDataSet* vtkPartitionedDataSet::GetPartition(unsigned int idx)
55 {
56   return vtkDataSet::SafeDownCast(this->GetPartitionAsDataObject(idx));
57 }
58 
59 //------------------------------------------------------------------------------
GetPartitionAsDataObject(unsigned int idx)60 vtkDataObject* vtkPartitionedDataSet::GetPartitionAsDataObject(unsigned int idx)
61 {
62   return this->Superclass::GetChild(idx);
63 }
64 
65 //------------------------------------------------------------------------------
SetPartition(unsigned int idx,vtkDataObject * partition)66 void vtkPartitionedDataSet::SetPartition(unsigned int idx, vtkDataObject* partition)
67 {
68   if (partition && partition->IsA("vtkCompositeDataSet"))
69   {
70     vtkErrorMacro("Partition cannot be a vtkCompositeDataSet.");
71     return;
72   }
73 
74   this->Superclass::SetChild(idx, partition);
75 }
76 
77 //------------------------------------------------------------------------------
RemoveNullPartitions()78 void vtkPartitionedDataSet::RemoveNullPartitions()
79 {
80   unsigned int next = 0;
81   for (unsigned int cc = 0; cc < this->GetNumberOfPartitions(); ++cc)
82   {
83     auto ds = this->GetPartition(cc);
84     if (ds)
85     {
86       if (next < cc)
87       {
88         this->SetPartition(next, ds);
89         if (this->HasChildMetaData(cc))
90         {
91           this->SetChildMetaData(next, this->GetChildMetaData(cc));
92         }
93         this->SetPartition(cc, nullptr);
94         this->SetChildMetaData(cc, nullptr);
95       }
96       next++;
97     }
98   }
99   this->SetNumberOfPartitions(next);
100 }
101 
102 //------------------------------------------------------------------------------
PrintSelf(ostream & os,vtkIndent indent)103 void vtkPartitionedDataSet::PrintSelf(ostream& os, vtkIndent indent)
104 {
105   this->Superclass::PrintSelf(os, indent);
106 }
107