6 #include <cpm/DataStructures/QuadEdgeMesh.h>
7 #include <cpm/IO/MeshReader.h>
8 #include <itkRegularSphereMeshSource.h>
9 #include <vnl/vnl_math.h>
12 #include <vtkCallbackCommand.h>
13 #include <vtkProperty.h>
14 #include <vtkRenderer.h>
15 #include <vtkRenderWindow.h>
16 #include <vtkRenderWindowInteractor.h>
17 #include <vtkSmartPointer.h>
18 #include <cpm/VTK/MeshMapper.h>
20 #include <cpm/Algorithms/QuadEdge/DecimationCriteria.h>
21 #include <cpm/Algorithms/QuadEdge/SquaredEdgeLengthDecimationFilter.h>
24 // -------------------------------------------------------------------------
25 const unsigned int Dimension = 3;
26 typedef float TScalar;
27 typedef cpm::DataStructures::QuadEdgeMesh< TScalar, Dimension > TMesh;
28 typedef cpm::VTK::MeshMapper< TMesh > TMeshMapper;
30 typedef cpm::Algorithms::QuadEdge::NumberOfPointsCriterion< TMesh > TCriterion;
32 typedef cpm::Algorithms::QuadEdge::NumberOfFacesCriterion< TMesh > TCriterion;
33 typedef cpm::Algorithms::QuadEdge::MaxMeasureBoundCriterion< TMesh > TCriterion;
34 typedef cpm::Algorithms::QuadEdge::MinMeasureBoundCriterion< TMesh > TCriterion;
36 typedef cpm::Algorithms::QuadEdge::SquaredEdgeLengthDecimationFilter< TMesh, TMesh, TCriterion > TDecimator;
38 // -------------------------------------------------------------------------
39 int main( int argc, char* argv[] )
44 << "Usage: " << argv[ 0 ]
51 typedef cpm::IO::MeshReader< TMesh > TReader;
52 TReader::Pointer reader = TReader::New( );
53 reader->SetFileName( argv[ 1 ] );
55 TMesh::Pointer mesh = reader->GetOutput( );
57 TCriterion::Pointer criterion = TCriterion::New( );
58 criterion->TopologicalChangeOn( );
59 criterion->SetNumberOfElements( mesh->GetNumberOfPoints( ) / 10 );
60 criterion->SetMeasureBound( 1 );
62 TDecimator::Pointer decimator = TDecimator::New( );
63 decimator->SetInput( mesh );
64 decimator->SetCriterion( criterion );
68 vtkSmartPointer< TMeshMapper > mapper =
69 vtkSmartPointer< TMeshMapper >::New( );
70 mapper->SetInputData( decimator->GetOutput( ) );
73 vtkSmartPointer< vtkActor > actor =
74 vtkSmartPointer< vtkActor >::New( );
75 actor->SetMapper( mapper );
76 actor->GetProperty( )->SetColor( 1, 1, 0 );
77 actor->GetProperty( )->SetOpacity( 1 );
79 // Configure visualization objects
80 vtkSmartPointer< vtkRenderer > renderer =
81 vtkSmartPointer< vtkRenderer >::New( );
82 renderer->SetBackground( 0.1, 0.3, 0.5 );
84 vtkSmartPointer< vtkRenderWindow > window =
85 vtkSmartPointer< vtkRenderWindow >::New( );
86 window->AddRenderer( renderer );
87 window->SetSize( 800, 800 );
89 // Set up the interaction
90 vtkSmartPointer< vtkRenderWindowInteractor > interactor =
91 vtkSmartPointer< vtkRenderWindowInteractor >::New( );
92 window->SetInteractor( interactor );
95 renderer->AddActor( actor );