#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // ------------------------------------------------------------------------- const unsigned int Dimension = 3; typedef float TScalar; typedef cpm::DataStructures::QuadEdgeMesh< TScalar, Dimension > TMesh; typedef cpm::VTK::MeshMapper< TMesh > TMeshMapper; typedef cpm::Algorithms::QuadEdge::NumberOfPointsCriterion< TMesh > TCriterion; /* typedef cpm::Algorithms::QuadEdge::NumberOfFacesCriterion< TMesh > TCriterion; typedef cpm::Algorithms::QuadEdge::MaxMeasureBoundCriterion< TMesh > TCriterion; typedef cpm::Algorithms::QuadEdge::MinMeasureBoundCriterion< TMesh > TCriterion; */ typedef cpm::Algorithms::QuadEdge::SquaredEdgeLengthDecimationFilter< TMesh, TMesh, TCriterion > TDecimator; // ------------------------------------------------------------------------- int main( int argc, char* argv[] ) { if( argc < 2 ) { std::cerr << "Usage: " << argv[ 0 ] << " input_mesh" << std::endl; return( 1 ); } // fi typedef cpm::IO::MeshReader< TMesh > TReader; TReader::Pointer reader = TReader::New( ); reader->SetFileName( argv[ 1 ] ); reader->Update( ); TMesh::Pointer mesh = reader->GetOutput( ); TCriterion::Pointer criterion = TCriterion::New( ); criterion->TopologicalChangeOn( ); criterion->SetNumberOfElements( mesh->GetNumberOfPoints( ) / 10 ); criterion->SetMeasureBound( 1 ); TDecimator::Pointer decimator = TDecimator::New( ); decimator->SetInput( mesh ); decimator->SetCriterion( criterion ); decimator->Update( ); // Map mesh vtkSmartPointer< TMeshMapper > mapper = vtkSmartPointer< TMeshMapper >::New( ); mapper->SetInputData( decimator->GetOutput( ) ); // Create actor vtkSmartPointer< vtkActor > actor = vtkSmartPointer< vtkActor >::New( ); actor->SetMapper( mapper ); actor->GetProperty( )->SetColor( 1, 1, 0 ); actor->GetProperty( )->SetOpacity( 1 ); // Configure visualization objects vtkSmartPointer< vtkRenderer > renderer = vtkSmartPointer< vtkRenderer >::New( ); renderer->SetBackground( 0.1, 0.3, 0.5 ); vtkSmartPointer< vtkRenderWindow > window = vtkSmartPointer< vtkRenderWindow >::New( ); window->AddRenderer( renderer ); window->SetSize( 800, 800 ); // Set up the interaction vtkSmartPointer< vtkRenderWindowInteractor > interactor = vtkSmartPointer< vtkRenderWindowInteractor >::New( ); window->SetInteractor( interactor ); // Associate actors renderer->AddActor( actor ); // Begin interaction window->Render( ); interactor->Start( ); return( 0 ); } // eof - $RCSfile$