VTK/Examples/Cxx/PolyData/DecimatePolyline
From KitwarePublic
Decimate one Polyline
This example shows how to decimate one polyline.
Note that this example requires the git (master branch) version of VTK (as of 8/5/2010).
DecimatePolyline.cxx
#include <vtkVersion.h> #include <vtkDecimatePolylineFilter.h> #include <vtkMath.h> #include <vtkPolyData.h> #include <vtkCellArray.h> #include <vtkPolyDataMapper.h> #include <vtkActor.h> #include <vtkRenderer.h> #include <vtkRenderWindow.h> #include <vtkRenderWindowInteractor.h> #include <vtkProperty.h> #include <vtkSmartPointer.h> int main(int, char *[]) { const unsigned int numberofpoints = 100; vtkPolyData* circle = vtkPolyData::New(); vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New(); vtkSmartPointer<vtkCellArray> lines = vtkSmartPointer<vtkCellArray>::New(); vtkIdType* lineIndices = new vtkIdType[numberofpoints+1]; for( unsigned int i = 0; i < numberofpoints; i++ ) { const double angle = 2.0 * vtkMath::Pi() * static_cast< double >( i ) / static_cast< double >( numberofpoints ); points->InsertPoint( static_cast< vtkIdType >( i ), cos( angle ), sin( angle ), 0. ); lineIndices[i] = static_cast< vtkIdType >( i ); } lineIndices[numberofpoints] = 0; lines->InsertNextCell( numberofpoints+1, lineIndices ); delete[] lineIndices; circle->SetPoints( points ); circle->SetLines( lines ); vtkSmartPointer<vtkPolyDataMapper> c_mapper = vtkSmartPointer<vtkPolyDataMapper>::New(); #if VTK_MAJOR_VERSION <= 5 c_mapper->SetInput( circle ); #else c_mapper->SetInputData( circle ); #endif vtkSmartPointer<vtkActor> c_actor = vtkSmartPointer<vtkActor>::New(); c_actor->SetMapper( c_mapper ); vtkSmartPointer<vtkDecimatePolylineFilter> decimate = vtkSmartPointer<vtkDecimatePolylineFilter>::New(); #if VTK_MAJOR_VERSION <= 5 decimate->SetInput( circle ); #else decimate->SetInputData( circle ); #endif decimate->SetTargetReduction( 0.95 ); decimate->Update(); vtkSmartPointer<vtkPolyDataMapper> d_mapper = vtkSmartPointer<vtkPolyDataMapper>::New(); d_mapper->SetInputConnection( decimate->GetOutputPort() ); vtkSmartPointer<vtkActor> d_actor = vtkSmartPointer<vtkActor>::New(); d_actor->SetMapper( d_mapper ); d_actor->GetProperty()->SetColor( 1., 0. ,0. ); vtkSmartPointer<vtkRenderer> ren = vtkSmartPointer<vtkRenderer>::New(); ren->AddActor( c_actor ); ren->AddActor( d_actor ); vtkSmartPointer<vtkRenderWindow> renwin = vtkSmartPointer<vtkRenderWindow>::New(); renwin->AddRenderer( ren ); vtkSmartPointer<vtkRenderWindowInteractor> iren = vtkSmartPointer<vtkRenderWindowInteractor>::New(); iren->SetRenderWindow( renwin ); renwin->Render(); iren->Start(); circle->Delete(); return EXIT_SUCCESS; }
CMakeLists.txt
cmake_minimum_required(VERSION 2.8) PROJECT(DecimatePolyline) find_package(VTK REQUIRED) include(${VTK_USE_FILE}) if (APPLE) add_executable(DecimatePolyline MACOSX_BUNDLE DecimatePolyline.cxx) else() add_executable(DecimatePolyline DecimatePolyline.cxx) endif() if(VTK_LIBRARIES) target_link_libraries(DecimatePolyline ${VTK_LIBRARIES}) else() target_link_libraries(DecimatePolyline vtkHybrid ) endif()
