6 #include <cpPlugins/Extensions/QuadEdgeMesh.h>
7 #include <cpPlugins/Extensions/MeshReader.h>
8 #include <cpPlugins/Extensions/OpenGLMeshMapper.h>
10 #include <cpm/Algorithms/QuadEdge/MeshToDualFilter.h>
13 #include <vtkCallbackCommand.h>
14 #include <vtkProperty.h>
15 #include <vtkRenderer.h>
16 #include <vtkRenderWindow.h>
17 #include <vtkRenderWindowInteractor.h>
18 #include <vtkSmartPointer.h>
20 // -------------------------------------------------------------------------
21 const unsigned int Dimension = 3;
22 typedef float TScalar;
23 typedef cpPlugins::Extensions::QuadEdgeMesh< TScalar, Dimension > TMesh;
24 typedef cpPlugins::Extensions::OpenGLMeshMapper< TMesh > TMeshMapper;
26 // -------------------------------------------------------------------------
27 static void CallbackFunction(
28 vtkObject* caller, long unsigned int eventId,
29 void* clientData, void* callData
32 // -------------------------------------------------------------------------
33 int main( int argc, char* argv[] )
38 << "Usage: " << argv[ 0 ]
45 typedef cpPlugins::Extensions::MeshReader< TMesh > TReader;
46 TReader::Pointer reader = TReader::New( );
47 reader->SetFileName( argv[ 1 ] );
49 typedef cpm::Algorithms::QuadEdge::MeshToDualFilter< TMesh > TDualFilter;
50 TDualFilter::Pointer dual_filter = TDualFilter::New( );
51 dual_filter->SetInput( reader->GetOutput( ) );
54 vtkSmartPointer< TMeshMapper > mapper =
55 vtkSmartPointer< TMeshMapper >::New( );
56 mapper->SetInputData( reader->GetOutput( ) );
59 vtkSmartPointer< TMeshMapper > dual_mapper =
60 vtkSmartPointer< TMeshMapper >::New( );
61 dual_mapper->SetInputData( dual_filter->GetOutput( ) );
64 vtkSmartPointer< vtkActor > actor =
65 vtkSmartPointer< vtkActor >::New( );
66 actor->SetMapper( mapper );
67 actor->GetProperty( )->SetColor( 1, 1, 0 );
68 actor->GetProperty( )->SetOpacity( 0.5 );
71 vtkSmartPointer< vtkActor > dual_actor =
72 vtkSmartPointer< vtkActor >::New( );
73 dual_actor->SetMapper( dual_mapper );
74 dual_actor->GetProperty( )->SetColor( 1, 0, 0 );
75 dual_actor->GetProperty( )->SetOpacity( 1 );
76 dual_actor->GetProperty( )->SetLineWidth( 2 );
77 dual_actor->GetProperty( )->SetRepresentationToWireframe( );
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 );
96 renderer->AddActor( dual_actor );
99 vtkSmartPointer< vtkCallbackCommand > callback =
100 vtkSmartPointer< vtkCallbackCommand >::New( );
101 callback->SetCallback( CallbackFunction );
102 renderer->AddObserver( vtkCommand::EndEvent, callback );
106 interactor->Start( );
111 // -------------------------------------------------------------------------
112 void CallbackFunction(
113 vtkObject* caller, long unsigned int eventId,
114 void* clientData, void* callData
117 vtkRenderer* renderer = static_cast< vtkRenderer* >( caller );
118 double timeInSeconds = renderer->GetLastRenderTimeInSeconds( );
119 double fps = 1.0 / timeInSeconds;
120 std::cout << "FPS: " << fps << std::endl;