1 /*=========================================================================
2
3 Program: Visualization Toolkit
4 Module: vtkCompositeDataGeometryFilter.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 "vtkCompositeDataGeometryFilter.h"
16
17 #include "vtkAppendPolyData.h"
18 #include "vtkCompositeDataIterator.h"
19 #include "vtkCompositeDataPipeline.h"
20 #include "vtkDataSet.h"
21 #include "vtkDataSetSurfaceFilter.h"
22 #include "vtkImageData.h"
23 #include "vtkInformation.h"
24 #include "vtkInformationVector.h"
25 #include "vtkCompositeDataSet.h"
26 #include "vtkObjectFactory.h"
27
28 vtkStandardNewMacro(vtkCompositeDataGeometryFilter);
29
30 //-----------------------------------------------------------------------------
vtkCompositeDataGeometryFilter()31 vtkCompositeDataGeometryFilter::vtkCompositeDataGeometryFilter()
32 {
33 }
34
35 //-----------------------------------------------------------------------------
~vtkCompositeDataGeometryFilter()36 vtkCompositeDataGeometryFilter::~vtkCompositeDataGeometryFilter()
37 {
38 }
39
40 //-----------------------------------------------------------------------------
FillInputPortInformation(int vtkNotUsed (port),vtkInformation * info)41 int vtkCompositeDataGeometryFilter::FillInputPortInformation(
42 int vtkNotUsed(port), vtkInformation* info)
43 {
44 // now add our info
45 info->Set(vtkAlgorithm::INPUT_REQUIRED_DATA_TYPE(), "vtkCompositeDataSet");
46 return 1;
47 }
48
49 //-----------------------------------------------------------------------------
ProcessRequest(vtkInformation * request,vtkInformationVector ** inputVector,vtkInformationVector * outputVector)50 int vtkCompositeDataGeometryFilter::ProcessRequest(
51 vtkInformation* request,
52 vtkInformationVector** inputVector,
53 vtkInformationVector* outputVector)
54 {
55 // generate the data
56 if(request->Has(vtkCompositeDataPipeline::REQUEST_DATA()))
57 {
58 int retVal = this->RequestCompositeData(request, inputVector, outputVector);
59 return retVal;
60 }
61
62 return this->Superclass::ProcessRequest(request, inputVector, outputVector);
63 }
64
65 //-----------------------------------------------------------------------------
RequestCompositeData(vtkInformation *,vtkInformationVector ** inputVector,vtkInformationVector * outputVector)66 int vtkCompositeDataGeometryFilter::RequestCompositeData(
67 vtkInformation*,
68 vtkInformationVector** inputVector,
69 vtkInformationVector* outputVector)
70 {
71 vtkInformation* inInfo = inputVector[0]->GetInformationObject(0);
72 vtkCompositeDataSet *input = vtkCompositeDataSet::SafeDownCast(
73 inInfo->Get(vtkDataObject::DATA_OBJECT()));
74 if (!input)
75 {
76 vtkErrorMacro("No input composite dataset provided.");
77 return 0;
78 }
79
80 vtkInformation* info = outputVector->GetInformationObject(0);
81 vtkPolyData *output = vtkPolyData::SafeDownCast(
82 info->Get(vtkDataObject::DATA_OBJECT()));
83 if (!output)
84 {
85 vtkErrorMacro("No output polydata provided.");
86 return 0;
87 }
88
89 bool added=false;
90 vtkCompositeDataIterator* iter = input->NewIterator();
91 vtkAppendPolyData* append = vtkAppendPolyData::New();
92 for(iter->InitTraversal(); !iter->IsDoneWithTraversal(); iter->GoToNextItem())
93 {
94 vtkDataSet* ds = vtkDataSet::SafeDownCast(iter->GetCurrentDataObject());
95 if (ds)
96 {
97 vtkDataSetSurfaceFilter* dssf = vtkDataSetSurfaceFilter::New();
98 dssf->SetInputData(ds);
99 dssf->Update();
100 append->AddInputConnection(dssf->GetOutputPort());
101 dssf->Delete();
102 added = true;
103 }
104 }
105 iter->Delete();
106 if (added)
107 {
108 append->Update();
109 output->ShallowCopy(append->GetOutput());
110 }
111
112 append->Delete();
113
114 return 1;
115 }
116
117 //-----------------------------------------------------------------------------
CreateDefaultExecutive()118 vtkExecutive* vtkCompositeDataGeometryFilter::CreateDefaultExecutive()
119 {
120 return vtkCompositeDataPipeline::New();
121 }
122
123 //-----------------------------------------------------------------------------
PrintSelf(ostream & os,vtkIndent indent)124 void vtkCompositeDataGeometryFilter::PrintSelf(ostream& os, vtkIndent indent)
125 {
126 this->Superclass::PrintSelf(os,indent);
127 }
128
129