]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/wxVtk2DBaseView.cxx
Bug #1373
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / wxVtk2DBaseView.cxx
1 #include "wxVtk2DBaseView.h"
2
3 #include "vtkInfoTextImage.h"
4 #include "vtkInteractorStyleBaseView2D.h"
5 #include "vtkInfoTextImageInteractor.h"
6
7
8 wxVtk2DBaseView::wxVtk2DBaseView(wxWindow *parent)
9 :wxVtkBaseView(parent)
10 {
11    _imageViewer2XYZ   = NULL;
12    _vtkIinfoTextImage = NULL;
13 }
14
15 //EED 5mai2009
16 //-------------------------------------------------------------------
17 wxVtk2DBaseView::~wxVtk2DBaseView()
18 {
19         if (_vtkIinfoTextImage!=NULL)
20         {
21            delete _vtkIinfoTextImage;
22         }
23
24         if (_imageViewer2XYZ!=NULL)
25         {
26            delete _imageViewer2XYZ;
27         }
28 }
29
30 //-------------------------------------------------------------------
31 void wxVtk2DBaseView::TransformCoordinate_spacing_ViewToModel(double &X,double &Y, double &Z) //        virtual
32 {
33 //EEDx5
34         double spc[3];
35 //      GetVtkBaseData()->GetImageData()->GetSpacing(spc);
36 //JCP 04/08/10  W/O Image this->_imageViewer2XYZ->GetVtkImageViewer2()->GetInput()->GetSpacing(spc);
37         vtkImageData* image = this->_imageViewer2XYZ->GetVtkImageViewer2()->GetInput();
38         if(image){
39                 image->GetSpacing(spc);
40         }else{
41                 spc[0] = 1;
42                 spc[1] = 1;
43                 spc[2] = 1;
44         }
45
46
47         X = X / spc[0];
48         Y = Y / spc[1];
49         Z = Z / spc[2];
50
51 }
52
53 //-------------------------------------------------------------------
54 void wxVtk2DBaseView::TransformCoordinate_spacing_ModelToView(double &X,double &Y, double &Z) //        virtual
55 {
56 //EEDx5
57         double spc[3];
58 //      GetVtkBaseData()->GetImageData()->GetSpacing(spc);
59 //JCP 04/08/10  W/O Image this->_imageViewer2XYZ->GetVtkImageViewer2()->GetInput()->GetSpacing(spc);
60         vtkImageData* image = this->_imageViewer2XYZ->GetVtkImageViewer2()->GetInput();
61         if(image){
62                 image->GetSpacing(spc);
63         }else{
64                 spc[0] = 1;
65                 spc[1] = 1;
66                 spc[2] = 1;
67         }
68 //
69         X=X*spc[0];
70         Y=Y*spc[1];
71         Z=Z*spc[2];
72
73 }
74
75 //-------------------------------------------------------------------
76 void wxVtk2DBaseView::ResetView()
77 {
78         printf("EED wxVtk2DBaseView::ResetView");
79         double spx = 0,spy = 0,spz = 0;
80         int x1 = 1,x2 = 1,y1 = 1,y2 = 1,z1 = 1,z2 = 1;
81         wxVtkBaseView::Configure();
82
83         wxVTKRenderWindowInteractor *iren = GetWxVTKRenderWindowInteractor();
84         vtkImageData *imageData = GetVtkBaseData()->GetImageData();
85         if(imageData){
86                 imageData->UpdateInformation();
87                 imageData->SetUpdateExtent( imageData->GetWholeExtent());
88                 imageData->Update();
89                 _imageViewer2XYZ->GetVtkImageViewer2()->SetInput(imageData );
90                 imageData->GetSpacing (spx,spy,spz);
91                 imageData->GetExtent (x1,x2,y1,y2,z1,z2);
92         }
93
94
95         _imageViewer2XYZ -> SetExtentDimension(x1,x2,y1,y2,z1,z2);
96         _imageViewer2XYZ -> GetVtkImageViewer2()->SetupInteractor ( iren );
97
98 //EED 24oct2010
99     _imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel()->Modified();
100
101         _imageViewer2XYZ->GetVtkImageViewer2()->Render();
102
103         //////////////
104         //RaC 04-2010 Look for the description of new changes in vtkInteractorStyleBaseView2D constructor.
105         //
106         // Previous version
107         // SetInteractorStyleImage( vtkInteractorStyleBaseView2D::New() );
108         //
109         // Actual version
110         vtkInteractorStyleBaseView2D *style2D = vtkInteractorStyleBaseView2D::New();
111
112         manualInteractorWindowLevel *_manualinteractorwindowlevel= new manualInteractorWindowLevel();
113         style2D->SetInteractorWindowLevel( _manualinteractorwindowlevel );
114
115         vtkInteractorScrollZ *_vtkInteractorScrollZ = new vtkInteractorScrollZ();
116         style2D->SetInteractorScrollZ(_vtkInteractorScrollZ);
117
118         SetInteractorStyleImage( style2D );
119
120         // RaC
121         //////////////
122
123 }
124
125
126
127 //-------------------------------------------------------------------
128 void wxVtk2DBaseView::SetImageToVtkViewer(vtkImageData *imageData)
129 {
130         if (_imageViewer2XYZ!=NULL)
131         {
132                 _imageViewer2XYZ->GetVtkImageViewer2()->SetInput( imageData );
133         } // if _imageViewer2XYZ
134 }
135
136
137 //-------------------------------------------------------------------
138 void wxVtk2DBaseView::Configure(bool okimage)
139 {
140         double spx,spy,spz;
141         int x1,x2,y1,y2,z1,z2;
142         wxVtkBaseView::Configure();
143
144 // EED 17 Oct 2007
145         if (_imageViewer2XYZ==NULL)
146         {
147                 _imageViewer2XYZ = new vtkImageViewer2_XYZ();
148                 wxVTKRenderWindowInteractor *iren = GetWxVTKRenderWindowInteractor();
149                 _imageViewer2XYZ -> GetVtkImageViewer2()->SetupInteractor ( iren );
150
151                 //////////////
152                 //RaC 04-2010 Look for the description of new changes in vtkInteractorStyleBaseView2D constructor.
153                 //
154                 // Previous version
155                 // SetInteractorStyleImage( vtkInteractorStyleBaseView2D::New() );
156                 //
157                 // Actual version
158                 vtkInteractorStyleBaseView2D *style2D = vtkInteractorStyleBaseView2D::New();
159
160                 manualInteractorWindowLevel *_manualinteractorwindowlevel= new manualInteractorWindowLevel();
161                 style2D->SetInteractorWindowLevel( _manualinteractorwindowlevel );
162
163                 vtkInteractorScrollZ *_vtkInteractorScrollZ = new vtkInteractorScrollZ();
164                 style2D->SetInteractorScrollZ(_vtkInteractorScrollZ);
165
166                 SetInteractorStyleImage( style2D );
167
168                 // RaC
169                 //////////////
170         }
171
172
173         vtkImageData *imageData = GetVtkBaseData()->GetMarImageData()->GetImageData();
174         if (imageData!=NULL)
175         {
176                 imageData->UpdateInformation();
177                 imageData->SetUpdateExtent( imageData->GetWholeExtent());
178                 imageData->Update();
179                 if (okimage==true){
180                         imageData->GetSpacing (spx,spy,spz);
181                         imageData->GetExtent (x1,x2,y1,y2,z1,z2);
182                         SetImageToVtkViewer(imageData);
183                         _imageViewer2XYZ->SetExtentDimension(x1,x2,y1,y2,z1,z2);
184                         
185 /*EED Borrame,  now is syncroniced in vtkBaseData for all windows                       
186                         double range[2];
187                         imageData->GetScalarRange(range);
188                         if (range[1]<20000){
189                                  _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow( (range[1]-range[0])/2 );
190                                  _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel( (range[1]+range[0])/4 );
191                         } else {
192                                  _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow( 1000 );
193                                  _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel( 500 );
194                         }
195 */ 
196                         
197 // EED 31 Janvier 2007
198 //vtkImageActor *vtkimageactor = _imageViewer2XYZ->GetVtkImageViewer2()->GetImageActor ();
199 //vtkimageactor->InterpolateOff ();
200 //vtkLookupTable * _collookup = vtkLookupTable::New( );
201 //_collookup->SetNumberOfColors( 256 );
202 //_collookup->SetTableRange( 0 , 255 );
203 //_collookup->Build( );
204 //_collookup->SetTableValue( 0  , 1 , 0 , 0 , 1 );
205 //_collookup->SetTableValue(128 , 0 , 0 , 1 , 1 );
206 //_collookup->SetTableValue(255 , 0 , 1 , 0 , 1 );
207 //_imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel ()->SetLookupTable(_collookup );
208
209
210 // EED 17 Oct 2007
211 //                      SetInteractorStyleImage( vtkInteractorStyleBaseView2D::New() );
212
213
214                         vtkImageViewer2 *IV2            =       _imageViewer2XYZ->GetVtkImageViewer2();
215                         vtkCamera               *camera         =       IV2->GetRenderer()->GetActiveCamera();
216
217 //EED 17Avril2009
218 //EED 21 mars 2012      FLIP problem  ..PLOP..
219                         
220                         // XY
221                         camera->SetViewUp               ( spx*0                 , -spy*1                        , spz*0         );
222                         camera->SetPosition             ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , -spz*10000    );
223                         camera->SetFocalPoint   ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*0         );
224 /*
225                         camera->SetViewUp               ( spx*0                 , spy*1                 , spz*0         );
226                         camera->SetPosition             ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*10000     );
227                         camera->SetFocalPoint   ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*0         );
228 */
229
230                         
231                         camera->SetClippingRange( 0.01                  , 1000000 );
232                         camera->ComputeViewPlaneNormal();
233                         camera->SetParallelScale( spx*(x2-x1)/3.0 );
234
235                         // text information over the graphic window
236                         if(_vtkIinfoTextImage == NULL){
237                                 _vtkIinfoTextImage                                      = new vtkInfoTextImage();
238                                 _vtkIinfoTextImageInteractor            = new vtkInfoTextImageInteractor();
239                                 ((vtkInteractorStyleBaseView*)this->GetInteractorStyleBaseView())->AddInteractorStyleMaracas(_vtkIinfoTextImageInteractor);
240                         }
241                         _vtkIinfoTextImage->SetWxVtk2DBaseView(this);
242                         _vtkIinfoTextImage->SetMarImageData( GetVtkBaseData()->GetMarImageData() );
243                         _vtkIinfoTextImageInteractor->SetModelVtkInfoTextImage(_vtkIinfoTextImage);
244                         _vtkIinfoTextImage->Configure();
245
246                 } // okimage
247         } // imageData
248 }
249
250 //-------------------------------------------------------------------
251
252 int     wxVtk2DBaseView::GetActualSlice()  // virtual
253 {
254    return (int)(_vtkbasedata->GetZ());
255 }
256
257 //-------------------------------------------------------------------
258 void wxVtk2DBaseView::SetActualSlice(int slice)  // Virtual
259 {
260    _vtkbasedata->SetZ(slice);
261 }
262
263 //-------------------------------------------------------------------
264
265 vtkBaseData *wxVtk2DBaseView::GetVtkBaseData()
266 {
267    return _vtkbasedata;
268 }
269
270 //-------------------------------------------------------------------
271
272 void wxVtk2DBaseView::SetVtkBaseData(vtkBaseData *vtkbasedata)
273 {
274    _vtkbasedata=vtkbasedata;
275 }
276
277 //-------------------------------------------------------------------
278 void wxVtk2DBaseView::UpdateColorWindowLevel()
279 {
280         //EED 24oct2010
281         //EED 02nov2012
282         
283 //      vtkImageViewer2 *vtkimageviewer2        = _imageViewer2XYZ->GetVtkImageViewer2();               
284         
285         
286         vtkImageMapToWindowLevelColors* imagemaptowindowlevel = _imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel();
287         imagemaptowindowlevel->SetWindow( _vtkbasedata->GetColorWindow() );
288         imagemaptowindowlevel->SetLevel( _vtkbasedata->GetColorLevel() );
289         
290 // EED Borrame
291 //      vtkimageviewer2->SetColorWindow( _vtkbasedata->GetColorWindow() );
292 //      vtkimageviewer2->SetColorLevel(  _vtkbasedata->GetColorLevel() );
293         _imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel()->Modified();
294 }
295
296 //-------------------------------------------------------------------
297 void wxVtk2DBaseView::Refresh()
298 {
299         int z = (int)(GetVtkBaseData()->GetZ());
300         _imageViewer2XYZ->SetZSlice( z );
301         //EED 01nov2012
302         UpdateColorWindowLevel();       
303         wxVtkBaseView::Refresh();
304 }
305
306 //-------------------------------------------------------------------
307 void wxVtk2DBaseView::SetInteractorStyleImage(vtkInteractorStyleBaseView *interactorstylebaseview)
308 {
309         SetInteractorStyleBaseView(interactorstylebaseview);
310
311         wxVTKRenderWindowInteractor *iren = GetWxVTKRenderWindowInteractor();
312         interactorstylebaseview->SetInteractor ( iren );
313         iren->SetInteractorStyle(interactorstylebaseview);
314         interactorstylebaseview->SetwxVtkBaseView(this);
315
316         vtkMaracasImageViewer2Callback * cbk = vtkMaracasImageViewer2Callback::New();
317         cbk->IV = _imageViewer2XYZ->GetVtkImageViewer2();
318         interactorstylebaseview->AddObserver( vtkCommand::WindowLevelEvent, cbk );
319         interactorstylebaseview->AddObserver( vtkCommand::StartWindowLevelEvent, cbk );
320         interactorstylebaseview->AddObserver( vtkCommand::ResetWindowLevelEvent, cbk );
321         cbk->Delete();
322 }
323
324 //---------------------------------------------------------------------------
325 vtkRenderer* wxVtk2DBaseView::GetRenderer()     // virtual
326 {
327    return _imageViewer2XYZ->GetVtkImageViewer2()->GetRenderer();
328 }
329
330 //---------------------------------------------------------------------------
331 vtkRenderWindow* wxVtk2DBaseView::GetRenWin()           // virtual
332 {
333    return _imageViewer2XYZ->GetVtkImageViewer2()->GetRenderWindow();
334 }
335
336 //-------------------------------------------------------------------
337 void wxVtk2DBaseView::GetSpacing(double spc[3])  // virtual
338 {
339    vtkImageData *imageData      = GetVtkBaseData()->GetImageData();
340    if(imageData)
341    {
342         imageData->GetSpacing(spc);
343    }else{
344          spc[0] = 0;
345          spc[1] = 0;
346          spc[2] = 0;
347    }
348 }
349
350 //-------------------------------------------------------------------
351 void wxVtk2DBaseView::setColorTransferFunction(vtkColorTransferFunction* colortable)
352 {
353         if(_imageViewer2XYZ!=NULL)
354         {
355                 _imageViewer2XYZ->setColorTransferFunction(colortable);
356                 this->Refresh();
357         }
358 }
359
360 //-------------------------------------------------------------------
361 void wxVtk2DBaseView::SetColorWindow(double level)
362 {
363 //      _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow(level);
364         _vtkbasedata->SetColorWindow(level);    
365         this->Refresh();
366 }
367
368 //-------------------------------------------------------------------
369 void wxVtk2DBaseView::SetColorLevel(double level)
370 {
371 //      _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel(level);
372         _vtkbasedata->SetColorLevel(level);
373         this->Refresh();
374 }
375
376 //-------------------------------------------------------------------
377 int wxVtk2DBaseView::GetDirection() // virtual
378 {
379     return 2;
380 }
381