]> Creatis software - cpPlugins.git/blob - appli/examples/example_MPR.cxx
3f11a4fa091fde8c9c7193d971d7a36d88fc2f16
[cpPlugins.git] / appli / examples / example_MPR.cxx
1 #include <cstdlib>
2 #include <iostream>
3 #include <string>
4
5 #include <cpPlugins/Interface/Interface.h>
6 #include <cpPlugins/Interface/ProcessObject.h>
7 #include <cpPlugins/Interface/Image.h>
8 #include <cpPlugins/Extensions/Visualization/MPRActors.h>
9
10 #include <vtkActor.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
18 int main( int argc, char* argv[] )
19 {
20   if( argc < 4 )
21   {
22     std::cerr
23       << "Usage: " << argv[ 0 ]
24       << " plugins_file"
25       << " input_image"
26       << " pixel_type" << std::endl;
27     return( 1 );
28
29   } // fi
30   std::string plugins_file = argv[ 1 ];
31   std::string input_image_file = argv[ 2 ];
32   std::string pixel_type = argv[ 3 ];
33
34   // Create interface
35   typedef cpPlugins::Interface::Interface TInterface;
36   typedef TInterface::TClasses            TClasses;
37
38   TInterface plugins;
39   plugins.Load( plugins_file );
40
41   // Create objects
42   typedef cpPlugins::Interface::ProcessObject TProcessObject;
43   typedef TProcessObject::TParameters         TParameters;
44   cpPlugins::Interface::ProcessObject* reader;
45
46   reader =
47     dynamic_cast< TProcessObject* >(
48       plugins.CreateObject( "cpPlugins::Plugins::ImageReader" )
49       );
50   if( reader == NULL )
51   {
52     std::cerr << "No suitable reader found in plugins." << std::endl;
53     return( 1 );
54
55   } // fi
56
57   // Configure reader
58   TParameters reader_params = reader->GetDefaultParameters( );
59   reader_params[ "FileName" ].second = input_image_file;
60   reader_params[ "PixelType" ].second = pixel_type;
61   reader_params[ "ImageDimension" ].second = "3";
62   reader->SetParameters( reader_params );
63
64   // Execute reader
65   std::string msg = reader->Update( );
66
67   if( msg != "" )
68     std::cerr << "ERROR: " << msg << std::endl;
69
70   // Visualization stuff
71   vtkSmartPointer< vtkRenderWindow > window = 
72     vtkSmartPointer< vtkRenderWindow >::New( );
73
74   vtkSmartPointer< vtkRenderWindowInteractor > interactor = 
75     vtkSmartPointer< vtkRenderWindowInteractor >::New( );
76  
77   interactor->SetRenderWindow( window );
78
79   // Renderers
80   vtkSmartPointer< vtkRenderer > xrenderer =
81     vtkSmartPointer< vtkRenderer >::New( );
82   vtkSmartPointer< vtkRenderer > yrenderer =
83     vtkSmartPointer< vtkRenderer >::New( );
84   vtkSmartPointer< vtkRenderer > zrenderer =
85     vtkSmartPointer< vtkRenderer >::New( );
86   vtkSmartPointer< vtkRenderer > wrenderer =
87     vtkSmartPointer< vtkRenderer >::New( );
88  
89   xrenderer->SetBackground( 0.7, 0.5, 0.5 );
90   yrenderer->SetBackground( 0.5, 0.7, 0.5 );
91   zrenderer->SetBackground( 0.5, 0.5, 0.7 );
92   wrenderer->SetBackground( 0.5, 0.5, 0.5 );
93
94   xrenderer->SetViewport( 0, 0, 0.5, 0.5 );
95   yrenderer->SetViewport( 0, 0.5, 0.5, 1 );
96   zrenderer->SetViewport( 0.5, 0, 1, 0.5 );
97   wrenderer->SetViewport( 0.5, 0.5, 1, 1 );
98
99   window->AddRenderer( xrenderer );
100   window->AddRenderer( yrenderer );
101   window->AddRenderer( zrenderer );
102   window->AddRenderer( wrenderer );
103
104   // Create actors
105   typedef cpPlugins::Extensions::Visualization::MPRActors TMPRActors;
106   vtkSmartPointer< TMPRActors > mprActors =
107     vtkSmartPointer< TMPRActors >::New( );
108   mprActors->SetInputData(
109     dynamic_cast< cpPlugins::Interface::Image* >( reader->GetOutput( 0 ) )->
110     GetVTKImageData( )
111     );
112   mprActors->PushDataInto( xrenderer, yrenderer, zrenderer, wrenderer );
113
114   // Begin interaction
115   xrenderer->ResetCamera( );
116   yrenderer->ResetCamera( );
117   zrenderer->ResetCamera( );
118   wrenderer->ResetCamera( );
119   window->Render( );
120   interactor->Start( );
121
122   // Free memory
123   delete reader;
124
125   return( 0 );
126 }
127
128 // eof - $RCSfile$