VTK/Examples/Developers/Broken/MultipleOutputConnections
From KitwarePublic
< VTK | Examples | Developers
Contents |
MultipleOutputConnections.cxx
#include <vtkSmartPointer.h> #include "vtkTestFilter.h" int main(int, char*[]) { //setup the second input vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New(); points->InsertNextPoint(4.0, 5.0, 6.0); vtkSmartPointer<vtkPolyData> polydata = vtkSmartPointer<vtkPolyData>::New(); polydata->SetPoints(points); vtkSmartPointer<vtkTestFilter> filter = vtkSmartPointer<vtkTestFilter>::New(); filter->SetInputConnection(polydata->GetProducerPort()); filter->Update(); vtkPolyData* output0 = filter->GetOutput(0); vtkPolyData* output1 = filter->GetOutput(1); std::cout << "Output0 has " << output0->GetNumberOfPoints() << " points." << std::endl; std::cout << "Output1 has " << output1->GetNumberOfPoints() << " points." << std::endl; return EXIT_SUCCESS; }
vtkTestFilter.h
// .NAME vtkTestFilter // .SECTION Description // vtkTestFilter #ifndef __vtkTestFilter_h #define __vtkTestFilter_h #include "vtkPolyDataAlgorithm.h" class vtkTestFilter : public vtkPolyDataAlgorithm { public: vtkTypeMacro(vtkTestFilter,vtkPolyDataAlgorithm); static vtkTestFilter *New(); protected: vtkTestFilter(){} ~vtkTestFilter(){} //int FillOutputPortInformation( int port, vtkInformation* info ); int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *); int RequestDataObject( vtkInformation*, vtkInformationVector** inputVector , vtkInformationVector* outputVector); private: vtkTestFilter(const vtkTestFilter&); // Not implemented. void operator=(const vtkTestFilter&); // Not implemented. }; #endif
vtkTestFilter.cxx
#include "vtkTestFilter.h" #include "vtkObjectFactory.h" #include "vtkStreamingDemandDrivenPipeline.h" #include "vtkInformationVector.h" #include "vtkInformation.h" #include "vtkDataObject.h" #include "vtkSmartPointer.h" vtkStandardNewMacro(vtkTestFilter); /* int vtkTestFilter::FillOutputPortInformation( int port, vtkInformation* info ) { if(port == 0) { info->Set(vtkDataObject::DATA_TYPE_NAME(), "vtkPolyData" ); info->Set(vtkAlgorithm::OUTPUT_IS_REPEATABLE(), 1); return 1; } vtkErrorMacro("This filter does not have more than 1 output port!"); return 0; } */ int vtkTestFilter::RequestData(vtkInformation *vtkNotUsed(request), vtkInformationVector **inputVector, vtkInformationVector *outputVector) { outputVector->SetNumberOfInformationObjects(2); // get the input info objects vtkInformation *inInfo = inputVector[0]->GetInformationObject(0); vtkInformation *outInfo0 = outputVector->GetInformationObject(0); vtkInformation *outInfo1 = outputVector->GetInformationObject(1); // get the output vtkPolyData *output0 = vtkPolyData::SafeDownCast( outInfo0->Get(vtkDataObject::DATA_OBJECT())); vtkPolyData *output1 = vtkPolyData::SafeDownCast( outInfo1->Get(vtkDataObject::DATA_OBJECT())); // get the input vtkPolyData *input = vtkPolyData::SafeDownCast( inInfo->Get(vtkDataObject::DATA_OBJECT())); output0->ShallowCopy(input); vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New(); points->InsertNextPoint(0,0,0); points->InsertNextPoint(0,0,1); vtkSmartPointer<vtkPolyData> polydata = vtkSmartPointer<vtkPolyData>::New(); polydata->SetPoints(points); output1->ShallowCopy(polydata); return 1; } int vtkTestFilter::RequestDataObject( vtkInformation*, vtkInformationVector** inputVector , vtkInformationVector* outputVector) { vtkInformation* inInfo = inputVector[0]->GetInformationObject(0); if (!inInfo) { return 0; } vtkDataSet *input = vtkDataSet::SafeDownCast( inInfo->Get(vtkPolyData::DATA_OBJECT())); if (input) { std::cout << "There are " << outputVector->GetNumberOfInformationObjects() << " output info objects" << std::endl; for(int i=0; i < outputVector->GetNumberOfInformationObjects(); ++i) { vtkInformation* info = outputVector->GetInformationObject(0); vtkDataSet *output = vtkDataSet::SafeDownCast( info->Get(vtkDataObject::DATA_OBJECT())); if (!output || !output->IsA(input->GetClassName())) { vtkDataSet* newOutput = input->NewInstance(); newOutput->SetPipelineInformation(info); newOutput->Delete(); } return 1; } } return 0; }
CMakeLists.txt
cmake_minimum_required(VERSION 2.6) PROJECT(vtkPolyDataAlgorithmDemo) FIND_PACKAGE(VTK REQUIRED) INCLUDE(${VTK_USE_FILE}) ADD_EXECUTABLE(FilterExample FilterExample.cxx vtkTestFilter.cxx) TARGET_LINK_LIBRARIES(FilterExample vtkHybrid)