#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; // ------------------------------------------------------------------------- static void CallbackFunction( vtkObject* caller, long unsigned int eventId, void* clientData, void* callData ); // ------------------------------------------------------------------------- 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 ] ); typedef cpm::Algorithms::QuadEdge::MeshToDualFilter< TMesh > TDualFilter; TDualFilter::Pointer dual_filter = TDualFilter::New( ); dual_filter->SetInput( reader->GetOutput( ) ); // Map mesh vtkSmartPointer< TMeshMapper > mapper = vtkSmartPointer< TMeshMapper >::New( ); mapper->SetInputData( reader->GetOutput( ) ); // Map dual mesh vtkSmartPointer< TMeshMapper > dual_mapper = vtkSmartPointer< TMeshMapper >::New( ); dual_mapper->SetInputData( dual_filter->GetOutput( ) ); // Create actor vtkSmartPointer< vtkActor > actor = vtkSmartPointer< vtkActor >::New( ); actor->SetMapper( mapper ); actor->GetProperty( )->SetColor( 1, 1, 0 ); actor->GetProperty( )->SetOpacity( 0.5 ); // Create dual actor vtkSmartPointer< vtkActor > dual_actor = vtkSmartPointer< vtkActor >::New( ); dual_actor->SetMapper( dual_mapper ); dual_actor->GetProperty( )->SetColor( 1, 0, 0 ); dual_actor->GetProperty( )->SetOpacity( 1 ); dual_actor->GetProperty( )->SetLineWidth( 2 ); dual_actor->GetProperty( )->SetRepresentationToWireframe( ); // 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 ); renderer->AddActor( dual_actor ); // Some callbacks vtkSmartPointer< vtkCallbackCommand > callback = vtkSmartPointer< vtkCallbackCommand >::New( ); callback->SetCallback( CallbackFunction ); renderer->AddObserver( vtkCommand::EndEvent, callback ); // Begin interaction window->Render( ); interactor->Start( ); return( 0 ); } // ------------------------------------------------------------------------- void CallbackFunction( vtkObject* caller, long unsigned int eventId, void* clientData, void* callData ) { vtkRenderer* renderer = static_cast< vtkRenderer* >( caller ); double timeInSeconds = renderer->GetLastRenderTimeInSeconds( ); double fps = 1.0 / timeInSeconds; std::cout << "FPS: " << fps << std::endl; } // eof - $RCSfile$