Difference between revisions of "VTK/Examples/Cxx/PolyData/DecimatePolyline"

From KitwarePublic
< VTK‎ | Examples‎ | Cxx
Jump to navigationJump to search
Line 3: Line 3:
 
This example shows how to decimate one polyline.
 
This example shows how to decimate one polyline.
  
Note that this example requires the git (master branch) version of vtk
+
Note that this example requires the git (master branch) version of VTK (as of 8/5/2010).
  
 
==DecimatePolyline.cxx==
 
==DecimatePolyline.cxx==

Revision as of 14:05, 1 September 2010

VTK Examples Baseline Widgets DecimatePolyline.png

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 <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();
  c_mapper->SetInput( circle );

  vtkSmartPointer<vtkActor> c_actor = 
    vtkSmartPointer<vtkActor>::New();
  c_actor->SetMapper( c_mapper );

  vtkSmartPointer<vtkDecimatePolylineFilter> decimate = 
    vtkSmartPointer<vtkDecimatePolylineFilter>::New();
  decimate->SetInput( circle );
  decimate->SetTargetReduction( 0.95 );
  decimate->Update();

  vtkSmartPointer<vtkPolyDataMapper> d_mapper = 
    vtkSmartPointer<vtkPolyDataMapper>::New();
  d_mapper->SetInput( decimate->GetOutput() );

  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

project( DecimatePolyline )
cmake_minimum_required( VERSION 2.6 )

find_package( VTK REQUIRED )
include( ${VTK_USE_FILE} )

add_executable( DecimatePolyline DecimatePolyline.cxx )
target_link_libraries( DecimatePolyline vtkHybrid )