]> Creatis software - FrontAlgorithms.git/blob - lib/fpa/VTK/ImageMPR.cxx
d435bb8e515baa3449f60b51c818785c7d0ebb00
[FrontAlgorithms.git] / lib / fpa / VTK / ImageMPR.cxx
1 #include <fpa/VTK/ImageMPR.h>
2
3 #include <vtkInteractorStyleSwitch.h>
4
5 // -------------------------------------------------------------------------
6 fpa::VTK::ImageMPR::
7 ImageMPR( )
8 {
9   // vtkSmartPointer< vtkImageData > m_Image;
10
11   this->m_Outline = vtkSmartPointer< vtkOutlineSource >::New( );
12   this->m_OutlineMapper = vtkSmartPointer< vtkPolyDataMapper >::New( );
13   this->m_OutlineActor = vtkSmartPointer< vtkActor >::New( );
14   this->m_Picker = vtkSmartPointer< vtkCellPicker >::New( );
15   this->m_WidgetX = vtkSmartPointer< vtkImagePlaneWidget >::New( );
16   this->m_WidgetY = vtkSmartPointer< vtkImagePlaneWidget >::New( );
17   this->m_WidgetZ = vtkSmartPointer< vtkImagePlaneWidget >::New( );
18   this->m_Renderer = vtkSmartPointer< vtkRenderer >::New( );
19   this->m_Window = vtkSmartPointer< vtkRenderWindow >::New( );
20   this->m_Interactor = vtkSmartPointer< vtkRenderWindowInteractor >::New( );
21 }
22     
23 // -------------------------------------------------------------------------
24 fpa::VTK::ImageMPR::
25 ~ImageMPR( )
26 {
27 }
28
29 // -------------------------------------------------------------------------
30 void fpa::VTK::ImageMPR::
31 SetImage( vtkImageData* image )
32 {
33   this->m_Image = image;
34
35   // Outline
36   this->m_Outline->SetBounds( this->m_Image->GetBounds( ) );
37   this->m_OutlineMapper->
38     SetInputConnection( this->m_Outline->GetOutputPort( ) );
39   this->m_OutlineActor->SetMapper( this->m_OutlineMapper );
40   this->m_OutlineActor->GetProperty( )->SetColor( 1, 1, 1 );
41
42   // Local picker
43   this->m_Picker->SetTolerance( 0.005 );
44
45   // Image planes
46   this->m_WidgetX->DisplayTextOn( );
47   this->m_WidgetX->SetInputData( this->m_Image );
48   this->m_WidgetX->SetPlaneOrientationToXAxes( );
49   this->m_WidgetX->SetSliceIndex( this->m_Image->GetExtent( )[ 0 ] );
50   this->m_WidgetX->SetPicker( this->m_Picker );
51   this->m_WidgetX->SetKeyPressActivationValue( 'x' );
52   this->m_WidgetX->GetPlaneProperty( )->SetLineWidth( 3 );
53   this->m_WidgetX->GetPlaneProperty( )->SetColor( 0, 1, 1 );
54
55   this->m_WidgetY->DisplayTextOn( );
56   this->m_WidgetY->SetInputData( this->m_Image );
57   this->m_WidgetY->SetPlaneOrientationToYAxes( );
58   this->m_WidgetY->SetSliceIndex( this->m_Image->GetExtent( )[ 2 ] );
59   this->m_WidgetY->SetPicker( this->m_Picker );
60   this->m_WidgetY->SetKeyPressActivationValue( 'y' );
61   this->m_WidgetY->GetPlaneProperty( )->SetColor( 1, 0, 1 );
62   this->m_WidgetY->GetPlaneProperty( )->SetLineWidth( 3 );
63   this->m_WidgetY->SetLookupTable( this->m_WidgetX->GetLookupTable( ) );
64
65   this->m_WidgetZ->DisplayTextOn( );
66   this->m_WidgetZ->SetInputData( this->m_Image );
67   this->m_WidgetZ->SetPlaneOrientationToZAxes( );
68   this->m_WidgetZ->SetSliceIndex( this->m_Image->GetExtent( )[ 4 ] );
69   this->m_WidgetZ->SetPicker( this->m_Picker );
70   this->m_WidgetZ->SetKeyPressActivationValue( 'z' );
71   this->m_WidgetZ->GetPlaneProperty( )->SetColor( 1, 1, 0 );
72   this->m_WidgetZ->GetPlaneProperty( )->SetLineWidth( 3 );
73   this->m_WidgetZ->SetLookupTable( this->m_WidgetX->GetLookupTable( ) );
74
75   // Rendering stuff
76   this->m_Window->AddRenderer( this->m_Renderer );
77   this->m_Interactor->SetRenderWindow( this->m_Window );
78
79   // Command
80   double spac[ 3 ];
81   this->m_Image->GetSpacing( spac );
82   double min_spacing = spac[ 0 ];
83   for( unsigned int d = 1; d < 3; d++ )
84     min_spacing = ( spac[ d ] < min_spacing )? spac[ d ]: min_spacing;
85
86   vtkInteractorStyleSwitch* iswitch =
87     dynamic_cast< vtkInteractorStyleSwitch* >(
88       this->m_Interactor->GetInteractorStyle( )
89       );
90   if( iswitch != NULL )
91     iswitch->SetCurrentStyleToTrackballCamera( );
92
93   // Add actors
94   this->m_Renderer->AddActor( this->m_OutlineActor );
95
96   // Prepare widgets
97   this->m_WidgetX->SetInteractor( this->m_Interactor );
98   this->m_WidgetY->SetInteractor( this->m_Interactor );
99   this->m_WidgetZ->SetInteractor( this->m_Interactor );
100 }
101
102 // -------------------------------------------------------------------------
103 void fpa::VTK::ImageMPR::
104 SetBackground( double r, double g, double b )
105 {
106   this->m_Renderer->SetBackground( r, g, b );
107 }
108
109 // -------------------------------------------------------------------------
110 void fpa::VTK::ImageMPR::
111 SetSize( unsigned int w, unsigned int h )
112 {
113   this->m_Window->SetSize( w, h );
114 }
115
116 // -------------------------------------------------------------------------
117 void fpa::VTK::ImageMPR::
118 AddPolyData( vtkPolyData* pd, double r, double g, double b )
119 {
120   unsigned int i = this->m_PolyDatas.size( );
121
122   this->m_PolyDatas.push_back( pd );
123   this->m_Mappers.push_back( vtkSmartPointer< vtkPolyDataMapper >::New( ) );
124   this->m_Actors.push_back( vtkSmartPointer< vtkActor >::New( ) );
125
126   this->m_Mappers[ i ]->SetInputData( pd );
127   this->m_Actors[ i ]->SetMapper( this->m_Mappers[ i ] );
128   this->m_Actors[ i ]->GetProperty( )->SetColor( r, g, b );
129   this->m_Renderer->AddActor( this->m_Actors[ i ] );
130 }
131
132 // -------------------------------------------------------------------------
133 vtkRenderWindow* fpa::VTK::ImageMPR::
134 GetWindow( ) const
135 {
136   return( this->m_Window );
137 }
138
139 // -------------------------------------------------------------------------
140 vtkRenderer* fpa::VTK::ImageMPR::
141 GetRenderer( ) const
142 {
143   return( this->m_Renderer );
144 }
145
146 // -------------------------------------------------------------------------
147 void fpa::VTK::ImageMPR::
148 Start( )
149 {
150   this->m_WidgetX->On( );
151   this->m_WidgetY->On( );
152   this->m_WidgetZ->On( );
153
154   this->m_Renderer->ResetCamera( );
155   this->m_Interactor->Initialize( );
156   this->m_Interactor->Start( );
157 }
158
159 // eof - $RCSfile$