]> Creatis software - cpPlugins.git/blob - lib/cpExtensions/Visualization/MPRObjects.cxx
aaadf31b1b61ede9daff48099bb27613b232f87f
[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 ActivateInteractors( )
74 {
75   // Prepare renderers
76   for( int i = 0; i < 3; ++i )
77   {
78     // Check prerrequisites
79     if( this->m_Windows[ i ] == NULL || this->m_Renderers[ i ] == NULL )
80     {
81       this->m_Styles[ i ] = NULL;
82       continue;
83
84     } // fi
85
86     ImageSliceActors* actors = this->m_MPRActors->GetSliceActors( i );
87     if( actors == NULL )
88     {
89       this->m_Styles[ i ] = NULL;
90       continue;
91
92     } // fi
93
94     this->m_Styles[ i ] = vtkSmartPointer< TStyle >::New( );
95     this->m_Styles[ i ]->Configure( actors, this->m_MPRActors );
96     this->m_Styles[ i ]->
97       SetInteractor( this->m_Windows[ i ]->GetInteractor( ), i );
98     this->m_Styles[ i ]->SetModeToNavigation( );
99
100   } // rof
101
102   // Synch 2D and 3D renderers
103   for( int i = 0; i < 3; ++i )
104   {
105     for( int j = 0; j < 3; ++j )
106     {
107       if(
108         this->m_Windows[ i ] != NULL &&
109         this->m_Windows[ j ] != NULL &&
110         i != j
111         )
112         this->m_Styles[ i ]->
113           AssociateInteractor( this->m_Windows[ j ]->GetInteractor( ) );
114
115     } // rof
116     if( this->m_Windows[ 3 ] != NULL )
117       this->m_Styles[ i ]->
118         AssociateInteractor( this->m_Windows[ 3 ]->GetInteractor( ) );
119
120   } // rof
121
122   // Finish interactor linking
123   this->m_MPRActors->LinkInteractors( );
124
125   // Restart rendering
126   this->ResetCameras( );
127   this->RenderAll( );
128 }
129
130 // -------------------------------------------------------------------------
131 void cpExtensions::Visualization::MPRObjects::
132 ResetCamera( const int& id )
133 {
134   if( id < 4 )
135     if( this->m_Windows[ id ] != NULL )
136       this->m_Renderers[ id ]->ResetCamera( );
137 }
138
139 // -------------------------------------------------------------------------
140 void cpExtensions::Visualization::MPRObjects::
141 ResetCameras( )
142 {
143   for( int i = 0; i < 4; ++i )
144     if( this->m_Windows[ i ] != NULL )
145       this->m_Renderers[ i ]->ResetCamera( );
146 }
147
148 // -------------------------------------------------------------------------
149 void cpExtensions::Visualization::MPRObjects::
150 Render( const int& id )
151 {
152   if( id < 4 )
153     if( this->m_Windows[ id ] != NULL )
154       this->m_Windows[ id ]->Render( );
155 }
156
157 // -------------------------------------------------------------------------
158 void cpExtensions::Visualization::MPRObjects::
159 RenderAll( )
160 {
161   for( int i = 0; i < 4; ++i )
162     if( this->m_Windows[ i ] != NULL )
163       this->m_Windows[ i ]->Render( );
164 }
165
166 // -------------------------------------------------------------------------
167 vtkRenderer* cpExtensions::Visualization::MPRObjects::
168 GetXRenderer( )
169 {
170   return( this->m_Renderers[ 0 ] );
171 }
172
173 // -------------------------------------------------------------------------
174 vtkRenderer* cpExtensions::Visualization::MPRObjects::
175 GetYRenderer( )
176 {
177   return( this->m_Renderers[ 1 ] );
178 }
179
180 // -------------------------------------------------------------------------
181 vtkRenderer* cpExtensions::Visualization::MPRObjects::
182 GetZRenderer( )
183 {
184   return( this->m_Renderers[ 2 ] );
185 }
186
187 // -------------------------------------------------------------------------
188 vtkRenderer* cpExtensions::Visualization::MPRObjects::
189 Get3DRenderer( )
190 {
191   return( this->m_Renderers[ 3 ] );
192 }
193
194 // -------------------------------------------------------------------------
195 const vtkRenderer* cpExtensions::Visualization::MPRObjects::
196 GetXRenderer( ) const
197 {
198   return( this->m_Renderers[ 0 ] );
199 }
200
201 // -------------------------------------------------------------------------
202 const vtkRenderer* cpExtensions::Visualization::MPRObjects::
203 GetYRenderer( ) const
204 {
205   return( this->m_Renderers[ 1 ] );
206 }
207
208 // -------------------------------------------------------------------------
209 const vtkRenderer* cpExtensions::Visualization::MPRObjects::
210 GetZRenderer( ) const
211 {
212   return( this->m_Renderers[ 2 ] );
213 }
214
215 // -------------------------------------------------------------------------
216 const vtkRenderer* cpExtensions::Visualization::MPRObjects::
217 Get3DRenderer( ) const
218 {
219   return( this->m_Renderers[ 3 ] );
220 }
221
222 // -------------------------------------------------------------------------
223 cpExtensions::Visualization::MPRObjects::
224 MPRObjects( )
225   : vtkObject( )
226 {
227   // Prepare actors
228   this->m_MPRActors = vtkSmartPointer< TMPRActors >::New( );
229 }
230
231 // -------------------------------------------------------------------------
232 cpExtensions::Visualization::MPRObjects::
233 ~MPRObjects( )
234 {
235 }
236
237 // eof - $RCSfile$