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

From KitwarePublic
< VTK‎ | Examples‎ | Cxx
Jump to navigationJump to search
(VTK6 migration)
Line 7: Line 7:
 
==DecimatePolyline.cxx==
 
==DecimatePolyline.cxx==
 
<source lang="cpp">
 
<source lang="cpp">
 +
#include <vtkVersion.h>
 
#include <vtkDecimatePolylineFilter.h>
 
#include <vtkDecimatePolylineFilter.h>
 
#include <vtkMath.h>
 
#include <vtkMath.h>

Revision as of 10:03, 26 April 2012

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 <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;
}

Please try the new VTKExamples website.

CMakeLists.txt

cmake_minimum_required(VERSION 2.8)

PROJECT(DecimatePolyline)

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

add_executable(DecimatePolyline MACOSX_BUNDLE DecimatePolyline.cxx)

if(VTK_LIBRARIES)
  target_link_libraries(DecimatePolyline ${VTK_LIBRARIES})
else()
  target_link_libraries(DecimatePolyline vtkHybrid vtkWidgets)
endif()

Download and Build DecimatePolyline

Click here to download DecimatePolyline. and its CMakeLists.txt file.

Once the tarball DecimatePolyline.tar has been downloaded and extracted,

cd DecimatePolyline/build 
  • If VTK is installed:
cmake ..
  • If VTK is not installed but compiled on your system, you will need to specify the path to your VTK build:
cmake -DVTK_DIR:PATH=/home/me/vtk_build ..

Build the project:

make

and run it:

./DecimatePolyline

WINDOWS USERS PLEASE NOTE: Be sure to add the VTK bin directory to your path. This will resolve the VTK dll's at run time.