VTK/Examples/Developers/vtkPolyDataAlgorithmReader
From KitwarePublic
< VTK | Examples | Developers
This example demonstrates a reader that takes nothing as input and produces a vtkPolyData as output.
Contents |
ReaderExample.cxx
#include <vtkSmartPointer.h> #include <vtkPolyData.h> #include "vtkTestReader.h" int main (int, char *[]) { vtkSmartPointer<vtkTestReader> reader = vtkSmartPointer<vtkTestReader>::New(); reader->Update(); vtkPolyData* polydata = reader->GetOutput(); polydata->Print(std::cout); return EXIT_SUCCESS; }
vtkTestReader.h
#ifndef __vtkTestReader_h #define __vtkTestReader_h #include "vtkPolyDataAlgorithm.h" class vtkTestReader : public vtkPolyDataAlgorithm { public: vtkTypeMacro(vtkTestReader,vtkPolyDataAlgorithm); void PrintSelf(ostream& os, vtkIndent indent); static vtkTestReader *New(); protected: vtkTestReader(); ~vtkTestReader(); int FillOutputPortInformation( int port, vtkInformation* info ); int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *); private: vtkTestReader(const vtkTestReader&); // Not implemented. void operator=(const vtkTestReader&); // Not implemented. char* FileName; }; #endif
vtkTestReader.cxx
#include "vtkTestReader.h" #include "vtkObjectFactory.h" #include "vtkStreamingDemandDrivenPipeline.h" #include "vtkInformationVector.h" #include "vtkInformation.h" #include "vtkDataObject.h" #include "vtkSmartPointer.h" vtkStandardNewMacro(vtkTestReader); vtkTestReader::vtkTestReader() { this->FileName = NULL; this->SetNumberOfInputPorts(0); this->SetNumberOfOutputPorts(1); } vtkTestReader::~vtkTestReader() { } int vtkTestReader::FillOutputPortInformation( int port, vtkInformation* info ) { if ( port == 0 ) { info->Set(vtkDataObject::DATA_TYPE_NAME(), "vtkPolyData" ); return 1; } return 0; } int vtkTestReader::RequestData( vtkInformation *vtkNotUsed(request), vtkInformationVector **vtkNotUsed(inputVector), vtkInformationVector *outputVector) { // get the info object vtkInformation *outInfo = outputVector->GetInformationObject(0); // get the ouptut vtkPolyData *output = vtkPolyData::SafeDownCast( outInfo->Get(vtkDataObject::DATA_OBJECT())); vtkSmartPointer<vtkPolyData> polydata = vtkSmartPointer<vtkPolyData>::New(); vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New(); points->InsertNextPoint(0.0, 0.0, 0.0); polydata->SetPoints(points); //output = polydata; //doesn't work output->ShallowCopy(polydata); return 1; } //---------------------------------------------------------------------------- void vtkTestReader::PrintSelf(ostream& os, vtkIndent indent) { this->Superclass::PrintSelf(os,indent); os << indent << "File Name: " << (this->FileName ? this->FileName : "(none)") << "\n"; }
CMakeLists.txt
cmake_minimum_required(VERSION 2.6) PROJECT(vtkPolyDataAlgorithmDemo) FIND_PACKAGE(VTK REQUIRED) INCLUDE(${VTK_USE_FILE}) ADD_EXECUTABLE(ReaderExample ReaderExample.cxx vtkTestReader.cxx) TARGET_LINK_LIBRARIES(ReaderExample vtkHybrid)