]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/wxVtk2DBaseView.cxx
Bug #1679
[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                         double range[2];
185                         imageData->GetScalarRange(range);
186                         if (range[1]<20000){
187                                  _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow( (range[1]-range[0])/2 );
188                                  _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel( (range[1]+range[0])/4 );
189                         } else {
190                                  _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow( 1000 );
191                                  _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel( 500 );
192                         }
193 // EED 31 Janvier 2007
194 //vtkImageActor *vtkimageactor = _imageViewer2XYZ->GetVtkImageViewer2()->GetImageActor ();
195 //vtkimageactor->InterpolateOff ();
196 //vtkLookupTable * _collookup = vtkLookupTable::New( );
197 //_collookup->SetNumberOfColors( 256 );
198 //_collookup->SetTableRange( 0 , 255 );
199 //_collookup->Build( );
200 //_collookup->SetTableValue( 0  , 1 , 0 , 0 , 1 );
201 //_collookup->SetTableValue(128 , 0 , 0 , 1 , 1 );
202 //_collookup->SetTableValue(255 , 0 , 1 , 0 , 1 );
203 //_imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel ()->SetLookupTable(_collookup );
204
205
206 // EED 17 Oct 2007
207 //                      SetInteractorStyleImage( vtkInteractorStyleBaseView2D::New() );
208
209
210                         vtkImageViewer2 *IV2            =       _imageViewer2XYZ->GetVtkImageViewer2();
211                         vtkCamera               *camera         =       IV2->GetRenderer()->GetActiveCamera();
212
213 //EED 17Avril2009
214 //EED 21 mars 2012      FLIP problem  ..PLOP..
215                         
216                         // XY
217                         camera->SetViewUp               ( spx*0                 , -spy*1                        , spz*0         );
218                         camera->SetPosition             ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , -spz*10000    );
219                         camera->SetFocalPoint   ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*0         );
220 /*
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
226                         
227                         camera->SetClippingRange( 0.01                  , 1000000 );
228                         camera->ComputeViewPlaneNormal();
229                         camera->SetParallelScale( spx*(x2-x1)/3.0 );
230
231                         // text information over the graphic window
232                         if(_vtkIinfoTextImage == NULL){
233                                 _vtkIinfoTextImage                                      = new vtkInfoTextImage();
234                                 _vtkIinfoTextImageInteractor            = new vtkInfoTextImageInteractor();
235                                 ((vtkInteractorStyleBaseView*)this->GetInteractorStyleBaseView())->AddInteractorStyleMaracas(_vtkIinfoTextImageInteractor);
236                         }
237                         _vtkIinfoTextImage->SetWxVtk2DBaseView(this);
238                         _vtkIinfoTextImage->SetMarImageData( GetVtkBaseData()->GetMarImageData() );
239                         _vtkIinfoTextImageInteractor->SetModelVtkInfoTextImage(_vtkIinfoTextImage);
240                         _vtkIinfoTextImage->Configure();
241
242                 } // okimage
243         } // imageData
244 }
245
246 //-------------------------------------------------------------------
247
248 int     wxVtk2DBaseView::GetActualSlice()  // virtual
249 {
250    return (int)(_vtkbasedata->GetZ());
251 }
252
253 //-------------------------------------------------------------------
254 void wxVtk2DBaseView::SetActualSlice(int slice)  // Virtual
255 {
256    _vtkbasedata->SetZ(slice);
257 }
258
259 //-------------------------------------------------------------------
260
261 vtkBaseData *wxVtk2DBaseView::GetVtkBaseData()
262 {
263    return _vtkbasedata;
264 }
265
266 //-------------------------------------------------------------------
267
268 void wxVtk2DBaseView::SetVtkBaseData(vtkBaseData *vtkbasedata)
269 {
270    _vtkbasedata=vtkbasedata;
271 }
272
273 //-------------------------------------------------------------------
274
275 void wxVtk2DBaseView::Refresh()
276 {
277    int z = (int)(GetVtkBaseData()->GetZ());
278   _imageViewer2XYZ->SetZSlice( z );
279
280 //EED 24oct2010
281   _imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel()->Modified();
282
283    wxVtkBaseView::Refresh();
284 }
285
286 //-------------------------------------------------------------------
287
288 void wxVtk2DBaseView::SetInteractorStyleImage(vtkInteractorStyleBaseView *interactorstylebaseview)
289 {
290         SetInteractorStyleBaseView(interactorstylebaseview);
291
292         wxVTKRenderWindowInteractor *iren = GetWxVTKRenderWindowInteractor();
293         interactorstylebaseview->SetInteractor ( iren );
294         iren->SetInteractorStyle(interactorstylebaseview);
295         interactorstylebaseview->SetwxVtkBaseView(this);
296
297         vtkMaracasImageViewer2Callback * cbk = vtkMaracasImageViewer2Callback::New();
298         cbk->IV = _imageViewer2XYZ->GetVtkImageViewer2();
299         interactorstylebaseview->AddObserver( vtkCommand::WindowLevelEvent, cbk );
300         interactorstylebaseview->AddObserver( vtkCommand::StartWindowLevelEvent, cbk );
301         interactorstylebaseview->AddObserver( vtkCommand::ResetWindowLevelEvent, cbk );
302         cbk->Delete();
303 }
304
305 //---------------------------------------------------------------------------
306 vtkRenderer* wxVtk2DBaseView::GetRenderer()     // virtual
307 {
308    return _imageViewer2XYZ->GetVtkImageViewer2()->GetRenderer();
309 }
310 //---------------------------------------------------------------------------
311 vtkRenderWindow* wxVtk2DBaseView::GetRenWin()           // virtual
312 {
313    return _imageViewer2XYZ->GetVtkImageViewer2()->GetRenderWindow();
314 }
315
316 //-------------------------------------------------------------------
317 void wxVtk2DBaseView::GetSpacing(double spc[3])  // virtual
318 {
319    vtkImageData *imageData      = GetVtkBaseData()->GetImageData();
320    if(imageData){
321         imageData->GetSpacing(spc);
322    }else{
323          spc[0] = 0;
324          spc[1] = 0;
325          spc[2] = 0;
326    }
327 }
328
329 //-------------------------------------------------------------------
330 void wxVtk2DBaseView::setColorTransferFunction(vtkColorTransferFunction* colortable)
331 {
332         if(_imageViewer2XYZ!=NULL){
333                 _imageViewer2XYZ->setColorTransferFunction(colortable);
334                 this->Refresh();
335         }
336 }
337
338 //-------------------------------------------------------------------
339 void wxVtk2DBaseView::setWindowLevel(double level)
340 {
341 //      _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow(level);
342
343         vtkImageMapToWindowLevelColors* imagemaptowindowlevel = _imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel();
344         imagemaptowindowlevel->SetWindow(level);
345         this->Refresh();
346 }
347
348 //-------------------------------------------------------------------
349 void wxVtk2DBaseView::setColorLevel(double level)
350 {
351 //      _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel(level);
352         vtkImageMapToWindowLevelColors* imagemaptowindowlevel = _imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel();
353         imagemaptowindowlevel->SetLevel(level);
354         this->Refresh();
355 }
356
357 //-------------------------------------------------------------------
358 int wxVtk2DBaseView::GetDirection() // virtual
359 {
360     return 2;
361 }
362