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

From KitwarePublic
< VTK‎ | Examples‎ | Cxx
Jump to navigationJump to search
(VTK6 migration)
Line 48: Line 48:
 
   vtkSmartPointer<vtkPolyDataMapper> c_mapper =  
 
   vtkSmartPointer<vtkPolyDataMapper> c_mapper =  
 
     vtkSmartPointer<vtkPolyDataMapper>::New();
 
     vtkSmartPointer<vtkPolyDataMapper>::New();
 +
#if VTK_MAJOR_VERSION <= 5
 
   c_mapper->SetInput( circle );
 
   c_mapper->SetInput( circle );
 +
#else
 +
  c_mapper->SetInputData( circle );
 +
#endif
  
 
   vtkSmartPointer<vtkActor> c_actor =  
 
   vtkSmartPointer<vtkActor> c_actor =  
Line 56: Line 60:
 
   vtkSmartPointer<vtkDecimatePolylineFilter> decimate =  
 
   vtkSmartPointer<vtkDecimatePolylineFilter> decimate =  
 
     vtkSmartPointer<vtkDecimatePolylineFilter>::New();
 
     vtkSmartPointer<vtkDecimatePolylineFilter>::New();
 +
#if VTK_MAJOR_VERSION <= 5
 
   decimate->SetInput( circle );
 
   decimate->SetInput( circle );
 +
#else
 +
  decimate->SetInputData( circle );
 +
#endif
 
   decimate->SetTargetReduction( 0.95 );
 
   decimate->SetTargetReduction( 0.95 );
 
   decimate->Update();
 
   decimate->Update();
Line 62: Line 70:
 
   vtkSmartPointer<vtkPolyDataMapper> d_mapper =  
 
   vtkSmartPointer<vtkPolyDataMapper> d_mapper =  
 
     vtkSmartPointer<vtkPolyDataMapper>::New();
 
     vtkSmartPointer<vtkPolyDataMapper>::New();
   d_mapper->SetInput( decimate->GetOutput() );
+
   d_mapper->SetInputConnection( decimate->GetOutputPort() );
  
 
   vtkSmartPointer<vtkActor> d_actor =  
 
   vtkSmartPointer<vtkActor> d_actor =  

Revision as of 12:53, 18 January 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 <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.