]> Creatis software - cpPlugins.git/blob - lib/cpExtensions/Visualization/MPRObjects.cxx
...
[cpPlugins.git] / lib / cpExtensions / Visualization / MPRObjects.cxx
1 #include <cpExtensions/Visualization/MPRObjects.h>
2
3 // -------------------------------------------------------------------------
4 cpExtensions::Visualization::MPRObjects*
5 cpExtensions::Visualization::MPRObjects::
6 New( )
7 {
8   return( new Self( ) );
9 }
10
11 // -------------------------------------------------------------------------
12 void cpExtensions::Visualization::MPRObjects::
13 SetRenderWindows(
14   vtkRenderWindow* wx, vtkRenderWindow* wy,
15   vtkRenderWindow* wz, vtkRenderWindow* w3D
16   )
17 {
18   this->m_Windows[ 0 ] = wx;
19   this->m_Windows[ 1 ] = wy;
20   this->m_Windows[ 2 ] = wz;
21   this->m_Windows[ 3 ] = w3D;
22
23   // Prepare 2D renderers
24   for( int i = 0; i < 4; ++i )
25   {
26     if( this->m_Windows[ i ] == NULL )
27     {
28       this->m_Renderers[ i ] = NULL;
29       continue;
30
31     } // fi
32
33     // Create renderer, if render window exists
34     this->m_Renderers[ i ] = vtkSmartPointer< vtkRenderer >::New( );
35     this->m_Renderers[ i ]->SetBackground( 0.1, 0.3, 0.8 );
36     this->m_Windows[ i ]->AddRenderer( this->m_Renderers[ i ] );
37
38   } // rof
39
40   // Create 3D renderer
41   if( this->m_Windows[ 3 ] != NULL )
42     this->m_Renderers[ 3 ]->SetBackground( 0.2, 0.2, 0.2 );
43 }
44
45 // -------------------------------------------------------------------------
46 void cpExtensions::Visualization::MPRObjects::
47 SetImage( vtkImageData* image )
48 {
49   this->m_MPRActors->AddInputData( image );
50   this->m_MPRActors->PushDataInto(
51     this->m_Renderers[ 0 ],
52     this->m_Renderers[ 1 ],
53     this->m_Renderers[ 2 ],
54     this->m_Renderers[ 3 ]
55     );
56
57   // Correct cameras positions
58   /* TODO
59      vtkCamera* zCam = this->m_Renderers[ 2 ]->GetActiveCamera( );
60      zCam->SetViewUp( 0, -1, 0 );
61      zCam->SetPosition( 0, 0, -1 );
62      zCam->SetFocalPoint( 0, 0, 0 );
63   */
64
65   // First rendering
66   this->m_MPRActors->ResetSlices( );
67   this->ResetCameras( );
68   this->RenderAll( );
69 }
70
71 // -------------------------------------------------------------------------
72 void cpExtensions::Visualization::MPRObjects::
73 AddAuxiliaryImage( vtkImageData* image )
74 {
75   this->m_MPRActors->AddInputData( image );
76
77 #error Definir LUT de la nueva imagen
78
79   this->m_MPRActors->PushDataInto(
80     this->m_Renderers[ 0 ],
81     this->m_Renderers[ 1 ],
82     this->m_Renderers[ 2 ],
83     this->m_Renderers[ 3 ]
84     );
85
86   // Rendering
87   this->RenderAll( );
88 }
89
90 // -------------------------------------------------------------------------
91 void cpExtensions::Visualization::MPRObjects::
92 ActivateInteractors( )
93 {
94   // Prepare renderers
95   for( int i = 0; i < 3; ++i )
96   {
97     // Check prerrequisites
98     if( this->m_Windows[ i ] == NULL || this->m_Renderers[ i ] == NULL )
99     {
100       this->m_Styles[ i ] = NULL;
101       continue;
102
103     } // fi
104
105     ImageSliceActors* actors = this->m_MPRActors->GetSliceActors( i );
106     if( actors == NULL )
107     {
108       this->m_Styles[ i ] = NULL;
109       continue;
110
111     } // fi
112
113     this->m_Styles[ i ] = vtkSmartPointer< TStyle >::New( );
114     this->m_Styles[ i ]->Configure( actors, this->m_MPRActors );
115     this->m_Styles[ i ]->
116       SetInteractor( this->m_Windows[ i ]->GetInteractor( ), i );
117     this->m_Styles[ i ]->SetModeToNavigation( );
118
119   } // rof
120
121   // Synch 2D and 3D renderers
122   for( int i = 0; i < 3; ++i )
123   {
124     for( int j = 0; j < 3; ++j )
125     {
126       if(
127         this->m_Windows[ i ] != NULL &&
128         this->m_Windows[ j ] != NULL &&
129         i != j
130         )
131         this->m_Styles[ i ]->
132           AssociateInteractor( this->m_Windows[ j ]->GetInteractor( ) );
133
134     } // rof
135     if( this->m_Windows[ 3 ] != NULL )
136       this->m_Styles[ i ]->
137         AssociateInteractor( this->m_Windows[ 3 ]->GetInteractor( ) );
138
139   } // rof
140
141   // Finish interactor linking
142   this->m_MPRActors->LinkInteractors( );
143
144   // Restart rendering
145   this->ResetCameras( );
146   this->RenderAll( );
147 }
148
149 // -------------------------------------------------------------------------
150 void cpExtensions::Visualization::MPRObjects::
151 ResetCamera( const int& id )
152 {
153   if( id < 4 )
154     if( this->m_Windows[ id ] != NULL )
155       this->m_Renderers[ id ]->ResetCamera( );
156 }
157
158 // -------------------------------------------------------------------------
159 void cpExtensions::Visualization::MPRObjects::
160 ResetCameras( )
161 {
162   for( int i = 0; i < 4; ++i )
163     if( this->m_Windows[ i ] != NULL )
164       this->m_Renderers[ i ]->ResetCamera( );
165 }
166
167 // -------------------------------------------------------------------------
168 void cpExtensions::Visualization::MPRObjects::
169 Render( const int& id )
170 {
171   if( id < 4 )
172     if( this->m_Windows[ id ] != NULL )
173       this->m_Windows[ id ]->Render( );
174 }
175
176 // -------------------------------------------------------------------------
177 void cpExtensions::Visualization::MPRObjects::
178 RenderAll( )
179 {
180   for( int i = 0; i < 4; ++i )
181     if( this->m_Windows[ i ] != NULL )
182       this->m_Windows[ i ]->Render( );
183 }
184
185 // -------------------------------------------------------------------------
186 vtkRenderer* cpExtensions::Visualization::MPRObjects::
187 GetXRenderer( )
188 {
189   return( this->m_Renderers[ 0 ] );
190 }
191
192 // -------------------------------------------------------------------------
193 vtkRenderer* cpExtensions::Visualization::MPRObjects::
194 GetYRenderer( )
195 {
196   return( this->m_Renderers[ 1 ] );
197 }
198
199 // -------------------------------------------------------------------------
200 vtkRenderer* cpExtensions::Visualization::MPRObjects::
201 GetZRenderer( )
202 {
203   return( this->m_Renderers[ 2 ] );
204 }
205
206 // -------------------------------------------------------------------------
207 vtkRenderer* cpExtensions::Visualization::MPRObjects::
208 Get3DRenderer( )
209 {
210   return( this->m_Renderers[ 3 ] );
211 }
212
213 // -------------------------------------------------------------------------
214 const vtkRenderer* cpExtensions::Visualization::MPRObjects::
215 GetXRenderer( ) const
216 {
217   return( this->m_Renderers[ 0 ] );
218 }
219
220 // -------------------------------------------------------------------------
221 const vtkRenderer* cpExtensions::Visualization::MPRObjects::
222 GetYRenderer( ) const
223 {
224   return( this->m_Renderers[ 1 ] );
225 }
226
227 // -------------------------------------------------------------------------
228 const vtkRenderer* cpExtensions::Visualization::MPRObjects::
229 GetZRenderer( ) const
230 {
231   return( this->m_Renderers[ 2 ] );
232 }
233
234 // -------------------------------------------------------------------------
235 const vtkRenderer* cpExtensions::Visualization::MPRObjects::
236 Get3DRenderer( ) const
237 {
238   return( this->m_Renderers[ 3 ] );
239 }
240
241 // -------------------------------------------------------------------------
242 cpExtensions::Visualization::MPRObjects::
243 MPRObjects( )
244   : vtkObject( )
245 {
246   // Prepare actors
247   this->m_MPRActors = vtkSmartPointer< TMPRActors >::New( );
248 }
249
250 // -------------------------------------------------------------------------
251 cpExtensions::Visualization::MPRObjects::
252 ~MPRObjects( )
253 {
254 }
255
256 // eof - $RCSfile$