6 #include <cpm/DataStructures/QuadEdgeMesh.h>
7 #include <cpm/Algorithms/QuadEdge/MeshToDualFilter.h>
8 #include <cpm/IO/MeshReader.h>
11 #include <vtkCallbackCommand.h>
12 #include <vtkProperty.h>
13 #include <vtkRenderer.h>
14 #include <vtkRenderWindow.h>
15 #include <vtkRenderWindowInteractor.h>
16 #include <vtkSmartPointer.h>
17 #include <cpm/VTK/MeshMapper.h>
19 // -------------------------------------------------------------------------
20 const unsigned int Dimension = 3;
21 typedef float TScalar;
22 typedef cpm::DataStructures::QuadEdgeMesh< TScalar, Dimension > TMesh;
23 typedef cpm::VTK::MeshMapper< TMesh > TMeshMapper;
25 // -------------------------------------------------------------------------
26 static void CallbackFunction(
27 vtkObject* caller, long unsigned int eventId,
28 void* clientData, void* callData
31 // -------------------------------------------------------------------------
32 int main( int argc, char* argv[] )
37 << "Usage: " << argv[ 0 ]
44 typedef cpm::IO::MeshReader< TMesh > TReader;
45 TReader::Pointer reader = TReader::New( );
46 reader->SetFileName( argv[ 1 ] );
48 typedef cpm::Algorithms::QuadEdge::MeshToDualFilter< TMesh > TDualFilter;
49 TDualFilter::Pointer dual_filter = TDualFilter::New( );
50 dual_filter->SetInput( reader->GetOutput( ) );
53 vtkSmartPointer< TMeshMapper > mapper =
54 vtkSmartPointer< TMeshMapper >::New( );
55 mapper->SetInputData( reader->GetOutput( ) );
58 vtkSmartPointer< TMeshMapper > dual_mapper =
59 vtkSmartPointer< TMeshMapper >::New( );
60 dual_mapper->SetInputData( dual_filter->GetOutput( ) );
63 vtkSmartPointer< vtkActor > actor =
64 vtkSmartPointer< vtkActor >::New( );
65 actor->SetMapper( mapper );
66 actor->GetProperty( )->SetColor( 1, 1, 0 );
67 actor->GetProperty( )->SetOpacity( 0.5 );
70 vtkSmartPointer< vtkActor > dual_actor =
71 vtkSmartPointer< vtkActor >::New( );
72 dual_actor->SetMapper( dual_mapper );
73 dual_actor->GetProperty( )->SetColor( 1, 0, 0 );
74 dual_actor->GetProperty( )->SetOpacity( 1 );
75 dual_actor->GetProperty( )->SetLineWidth( 2 );
76 dual_actor->GetProperty( )->SetRepresentationToWireframe( );
78 // Configure visualization objects
79 vtkSmartPointer< vtkRenderer > renderer =
80 vtkSmartPointer< vtkRenderer >::New( );
81 renderer->SetBackground( 0.1, 0.3, 0.5 );
83 vtkSmartPointer< vtkRenderWindow > window =
84 vtkSmartPointer< vtkRenderWindow >::New( );
85 window->AddRenderer( renderer );
86 window->SetSize( 800, 800 );
88 // Set up the interaction
89 vtkSmartPointer< vtkRenderWindowInteractor > interactor =
90 vtkSmartPointer< vtkRenderWindowInteractor >::New( );
91 window->SetInteractor( interactor );
94 renderer->AddActor( actor );
95 renderer->AddActor( dual_actor );
98 vtkSmartPointer< vtkCallbackCommand > callback =
99 vtkSmartPointer< vtkCallbackCommand >::New( );
100 callback->SetCallback( CallbackFunction );
101 renderer->AddObserver( vtkCommand::EndEvent, callback );
105 interactor->Start( );
110 // -------------------------------------------------------------------------
111 void CallbackFunction(
112 vtkObject* caller, long unsigned int eventId,
113 void* clientData, void* callData
116 vtkRenderer* renderer = static_cast< vtkRenderer* >( caller );
117 double timeInSeconds = renderer->GetLastRenderTimeInSeconds( );
118 double fps = 1.0 / timeInSeconds;
119 std::cout << "FPS: " << fps << std::endl;