]> Creatis software - FrontAlgorithms.git/blob - lib/fpa/VTK/ImageMPR.cxx
Some tests... Package is unstable right nowgit status!
[FrontAlgorithms.git] / lib / fpa / VTK / ImageMPR.cxx
1 #include <fpa/VTK/ImageMPR.h>
2
3 #include <vtkCommand.h>
4 #include <vtkInteractorStyleSwitch.h>
5 #include <vtkPickingManager.h>
6
7 class vtkUpdateCallback
8   : public vtkCommand
9 {
10 public:
11   static vtkUpdateCallback *New()
12     {
13       return new vtkUpdateCallback;
14     }
15   virtual void Execute(vtkObject *caller, unsigned long eventId, void*
16                        arguments)
17     {
18       vtkRenderWindowInteractor* iren = 
19         static_cast< vtkRenderWindowInteractor* >( caller );
20       if( caller == NULL )
21         return;
22
23       switch( iren->GetKeyCode( ) )
24       {
25       case 'x':
26       case 'X':
27       {
28         bool eSeed = ( this->SeedWidget->GetProcessEvents( ) == 1 );
29         if( eSeed )
30         {
31           this->SeedWidget->ProcessEventsOff( );
32           this->WidgetX->InteractionOn( );
33           this->WidgetY->InteractionOn( );
34           this->WidgetZ->InteractionOn( );
35         }
36         else
37         {
38           this->SeedWidget->ProcessEventsOn( );
39           this->WidgetX->InteractionOff( );
40           this->WidgetY->InteractionOff( );
41           this->WidgetZ->InteractionOff( );
42
43         } // fi
44       }
45       break;
46       default:
47         break;
48
49       } // hctiws
50     }
51
52 public:
53   vtkImagePlaneWidget* WidgetX;
54   vtkImagePlaneWidget* WidgetY;
55   vtkImagePlaneWidget* WidgetZ;
56   vtkSeedWidget2*       SeedWidget;
57 };
58
59 // -------------------------------------------------------------------------
60 fpa::VTK::ImageMPR::
61 ImageMPR( )
62 {
63   this->m_Outline = vtkSmartPointer< vtkOutlineSource >::New( );
64   this->m_OutlineMapper = vtkSmartPointer< vtkPolyDataMapper >::New( );
65   this->m_OutlineActor = vtkSmartPointer< vtkActor >::New( );
66   this->m_Picker = vtkSmartPointer< vtkCellPicker >::New( );
67   this->m_WidgetX = vtkSmartPointer< vtkImagePlaneWidget >::New( );
68   this->m_WidgetY = vtkSmartPointer< vtkImagePlaneWidget >::New( );
69   this->m_WidgetZ = vtkSmartPointer< vtkImagePlaneWidget >::New( );
70   this->m_Renderer = vtkSmartPointer< vtkRenderer >::New( );
71   this->m_Window = vtkSmartPointer< vtkRenderWindow >::New( );
72   this->m_Interactor = vtkSmartPointer< vtkRenderWindowInteractor >::New( );
73
74
75
76
77
78
79   handlePointRep3D =
80     vtkSmartPointer<vtkPointHandleRepresentation3D>::New();
81   //handlePointRep3D->AllOn();
82   handlePointRep3D->GetProperty()->SetColor(1.,0.,1.);
83   seedRep =
84     vtkSmartPointer<vtkSeedRepresentation>::New();
85   seedRep->SetHandleRepresentation(handlePointRep3D);
86   seedWidget = vtkSmartPointer<vtkSeedWidget2>::New();
87
88   seedWidget->SetRepresentation(seedRep);
89
90   this->m_WidgetX->KeyPressActivationOff( );
91   this->m_WidgetY->KeyPressActivationOff( );
92   this->m_WidgetZ->KeyPressActivationOff( );
93   seedWidget->KeyPressActivationOff( );
94
95   // this->m_Interactor->GetPickingManager( )->AddPicker( this->m_Picker );
96
97
98   vtkUpdateCallback* onUpdate = vtkUpdateCallback::New();
99   onUpdate->WidgetX = this->m_WidgetX;
100   onUpdate->WidgetY = this->m_WidgetY;
101   onUpdate->WidgetZ = this->m_WidgetZ;
102   onUpdate->SeedWidget = this->seedWidget;
103
104   this->m_Interactor->AddObserver(vtkCommand::KeyPressEvent, onUpdate);
105 }
106     
107 // -------------------------------------------------------------------------
108 fpa::VTK::ImageMPR::
109 ~ImageMPR( )
110 {
111 }
112
113 // -------------------------------------------------------------------------
114 void fpa::VTK::ImageMPR::
115 SetImage( vtkImageData* image )
116 {
117   this->m_Image = image;
118
119   // Outline
120   this->m_Outline->SetBounds( this->m_Image->GetBounds( ) );
121   this->m_OutlineMapper->
122     SetInputConnection( this->m_Outline->GetOutputPort( ) );
123   this->m_OutlineActor->SetMapper( this->m_OutlineMapper );
124   this->m_OutlineActor->GetProperty( )->SetColor( 1, 1, 1 );
125
126   // Local picker
127   this->m_Picker->SetTolerance( 0.005 );
128
129   // Image planes
130   this->m_WidgetX->DisplayTextOn( );
131   this->m_WidgetX->SetInputData( this->m_Image );
132   this->m_WidgetX->SetPlaneOrientationToXAxes( );
133   this->m_WidgetX->SetSliceIndex( this->m_Image->GetExtent( )[ 0 ] );
134   this->m_WidgetX->SetPicker( this->m_Picker );
135   this->m_WidgetX->SetKeyPressActivationValue( 'x' );
136   this->m_WidgetX->GetPlaneProperty( )->SetLineWidth( 3 );
137   this->m_WidgetX->GetPlaneProperty( )->SetColor( 0, 1, 1 );
138
139   this->m_WidgetY->DisplayTextOn( );
140   this->m_WidgetY->SetInputData( this->m_Image );
141   this->m_WidgetY->SetPlaneOrientationToYAxes( );
142   this->m_WidgetY->SetSliceIndex( this->m_Image->GetExtent( )[ 2 ] );
143   this->m_WidgetY->SetPicker( this->m_Picker );
144   this->m_WidgetY->SetKeyPressActivationValue( 'y' );
145   this->m_WidgetY->GetPlaneProperty( )->SetColor( 1, 0, 1 );
146   this->m_WidgetY->GetPlaneProperty( )->SetLineWidth( 3 );
147   this->m_WidgetY->SetLookupTable( this->m_WidgetX->GetLookupTable( ) );
148
149   this->m_WidgetZ->DisplayTextOn( );
150   this->m_WidgetZ->SetInputData( this->m_Image );
151   this->m_WidgetZ->SetPlaneOrientationToZAxes( );
152   this->m_WidgetZ->SetSliceIndex( this->m_Image->GetExtent( )[ 4 ] );
153   this->m_WidgetZ->SetPicker( this->m_Picker );
154   this->m_WidgetZ->SetKeyPressActivationValue( 'z' );
155   this->m_WidgetZ->GetPlaneProperty( )->SetColor( 1, 1, 0 );
156   this->m_WidgetZ->GetPlaneProperty( )->SetLineWidth( 3 );
157   this->m_WidgetZ->SetLookupTable( this->m_WidgetX->GetLookupTable( ) );
158
159   // Rendering stuff
160   this->m_Window->AddRenderer( this->m_Renderer );
161   this->m_Interactor->SetRenderWindow( this->m_Window );
162
163   // Command
164   double spac[ 3 ];
165   this->m_Image->GetSpacing( spac );
166   double min_spacing = spac[ 0 ];
167   for( unsigned int d = 1; d < 3; d++ )
168     min_spacing = ( spac[ d ] < min_spacing )? spac[ d ]: min_spacing;
169
170   vtkInteractorStyleSwitch* iswitch =
171     dynamic_cast< vtkInteractorStyleSwitch* >(
172       this->m_Interactor->GetInteractorStyle( )
173       );
174   if( iswitch != NULL )
175     iswitch->SetCurrentStyleToTrackballCamera( );
176
177   // Add actors
178   this->m_Renderer->AddActor( this->m_OutlineActor );
179
180   // Prepare widgets
181   this->m_WidgetX->SetInteractor( this->m_Interactor );
182   this->m_WidgetY->SetInteractor( this->m_Interactor );
183   this->m_WidgetZ->SetInteractor( this->m_Interactor );
184   seedWidget->SetInteractor(this->m_Interactor);
185
186   this->m_WidgetX->On( );
187   this->m_WidgetY->On( );
188   this->m_WidgetZ->On( );
189   seedWidget->On( );
190   seedWidget->ProcessEventsOff( );
191   this->m_Interactor->SetPicker( this->m_Picker );
192   this->m_Interactor->GetPickingManager( )->AddPicker( this->m_Picker );
193   this->m_Interactor->GetPickingManager( )->EnabledOn( );
194 }
195
196 // -------------------------------------------------------------------------
197 void fpa::VTK::ImageMPR::
198 SetBackground( double r, double g, double b )
199 {
200   this->m_Renderer->SetBackground( r, g, b );
201 }
202
203 // -------------------------------------------------------------------------
204 void fpa::VTK::ImageMPR::
205 SetSize( unsigned int w, unsigned int h )
206 {
207   this->m_Window->SetSize( w, h );
208 }
209
210 // -------------------------------------------------------------------------
211 void fpa::VTK::ImageMPR::
212 AddPolyData( vtkPolyData* pd, double r, double g, double b )
213 {
214   unsigned int i = this->m_PolyDatas.size( );
215
216   this->m_PolyDatas.push_back( pd );
217   this->m_Mappers.push_back( vtkSmartPointer< vtkPolyDataMapper >::New( ) );
218   this->m_Actors.push_back( vtkSmartPointer< vtkActor >::New( ) );
219
220   this->m_Mappers[ i ]->SetInputData( pd );
221   this->m_Actors[ i ]->SetMapper( this->m_Mappers[ i ] );
222   this->m_Actors[ i ]->GetProperty( )->SetColor( r, g, b );
223   this->m_Renderer->AddActor( this->m_Actors[ i ] );
224 }
225
226 // -------------------------------------------------------------------------
227 vtkRenderWindow* fpa::VTK::ImageMPR::
228 GetWindow( ) const
229 {
230   return( this->m_Window );
231 }
232
233 // -------------------------------------------------------------------------
234 vtkRenderer* fpa::VTK::ImageMPR::
235 GetRenderer( ) const
236 {
237   return( this->m_Renderer );
238 }
239
240 // -------------------------------------------------------------------------
241 void fpa::VTK::ImageMPR::
242 Start( )
243 {
244   this->m_WidgetX->On( );
245   this->m_WidgetY->On( );
246   this->m_WidgetZ->On( );
247
248   this->m_Renderer->ResetCamera( );
249   this->m_Interactor->Initialize( );
250   this->m_Interactor->Start( );
251 }
252
253 // eof - $RCSfile$