]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/wxVtk2DBaseView.cxx
changes in viewers
[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         double spx = 0,spy = 0,spz = 0;
79         int x1 = 1,x2 = 1,y1 = 1,y2 = 1,z1 = 1,z2 = 1;
80         wxVtkBaseView::Configure();
81         
82         wxVTKRenderWindowInteractor *iren = GetWxVTKRenderWindowInteractor();
83         vtkImageData *imageData = GetVtkBaseData()->GetImageData();
84         if(imageData){
85                 imageData->UpdateInformation();
86                 imageData->SetUpdateExtent( imageData->GetWholeExtent());
87                 imageData->Update();
88                 _imageViewer2XYZ->GetVtkImageViewer2()->SetInput(imageData );
89                 imageData->GetSpacing (spx,spy,spz);
90                 imageData->GetExtent (x1,x2,y1,y2,z1,z2);
91         }
92
93         
94         _imageViewer2XYZ -> SetExtentDimension(x1,x2,y1,y2,z1,z2);
95         _imageViewer2XYZ -> GetVtkImageViewer2()->SetupInteractor ( iren );
96
97         _imageViewer2XYZ->GetVtkImageViewer2()->Render();
98
99         //////////////
100         //RaC 04-2010 Look for the description of new changes in vtkInteractorStyleBaseView2D constructor.
101         //
102         // Previous version
103         // SetInteractorStyleImage( vtkInteractorStyleBaseView2D::New() );
104         //
105         // Actual version
106         vtkInteractorStyleBaseView2D *style2D = vtkInteractorStyleBaseView2D::New();
107
108         manualInteractorWindowLevel *_manualinteractorwindowlevel= new manualInteractorWindowLevel();
109         style2D->SetInteractorWindowLevel( _manualinteractorwindowlevel );
110
111         vtkInteractorScrollZ *_vtkInteractorScrollZ = new vtkInteractorScrollZ();
112         style2D->SetInteractorScrollZ(_vtkInteractorScrollZ);
113
114         SetInteractorStyleImage( style2D );
115
116         // RaC
117         //////////////
118         
119 }
120
121
122 //-------------------------------------------------------------------
123 void wxVtk2DBaseView::Configure(bool okimage)
124 {
125         double spx,spy,spz;
126         int x1,x2,y1,y2,z1,z2;
127         wxVtkBaseView::Configure();
128
129 // EED 17 Oct 2007
130         if (_imageViewer2XYZ==NULL)
131         {
132                 _imageViewer2XYZ = new vtkImageViewer2_XYZ();
133                 wxVTKRenderWindowInteractor *iren = GetWxVTKRenderWindowInteractor();
134                 _imageViewer2XYZ -> GetVtkImageViewer2()->SetupInteractor ( iren );
135
136                 //////////////
137                 //RaC 04-2010 Look for the description of new changes in vtkInteractorStyleBaseView2D constructor.
138                 //
139                 // Previous version
140                 // SetInteractorStyleImage( vtkInteractorStyleBaseView2D::New() );
141                 //
142                 // Actual version
143                 vtkInteractorStyleBaseView2D *style2D = vtkInteractorStyleBaseView2D::New();
144
145                 manualInteractorWindowLevel *_manualinteractorwindowlevel= new manualInteractorWindowLevel();
146                 style2D->SetInteractorWindowLevel( _manualinteractorwindowlevel );
147
148                 vtkInteractorScrollZ *_vtkInteractorScrollZ = new vtkInteractorScrollZ();
149                 style2D->SetInteractorScrollZ(_vtkInteractorScrollZ);
150
151                 SetInteractorStyleImage( style2D );
152
153                 // RaC
154                 //////////////
155         }
156
157
158         vtkImageData *imageData = GetVtkBaseData()->GetMarImageData()->GetImageData();
159         if (imageData!=NULL){
160                 
161                 imageData->UpdateInformation();
162                 imageData->SetUpdateExtent( imageData->GetWholeExtent());
163                 imageData->Update();
164                 if (okimage==true){
165                         imageData->GetSpacing (spx,spy,spz);
166                         imageData->GetExtent (x1,x2,y1,y2,z1,z2);
167                         _imageViewer2XYZ->GetVtkImageViewer2()->SetInput(imageData );
168                         _imageViewer2XYZ->SetExtentDimension(x1,x2,y1,y2,z1,z2);
169                         double range[2];
170                         imageData->GetScalarRange(range);
171                         if (range[1]<20000){
172                                  _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow( (range[1]-range[0])/2 );
173                                  _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel( (range[1]+range[0])/4 );
174                         } else {
175                                  _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow( 1000 );
176                                  _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel( 500 );
177                         }
178 // EED 31 Janvier 2007
179 //vtkImageActor *vtkimageactor = _imageViewer2XYZ->GetVtkImageViewer2()->GetImageActor ();
180 //vtkimageactor->InterpolateOff ();
181 //vtkLookupTable * _collookup = vtkLookupTable::New( );
182 //_collookup->SetNumberOfColors( 256 );
183 //_collookup->SetTableRange( 0 , 255 );
184 //_collookup->Build( );
185 //_collookup->SetTableValue( 0  , 1 , 0 , 0 , 1 );
186 //_collookup->SetTableValue(128 , 0 , 0 , 1 , 1 );
187 //_collookup->SetTableValue(255 , 0 , 1 , 0 , 1 );
188 //_imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel ()->SetLookupTable(_collookup );
189
190
191 // EED 17 Oct 2007
192 //                      SetInteractorStyleImage( vtkInteractorStyleBaseView2D::New() );
193
194
195                         vtkImageViewer2 *IV2=_imageViewer2XYZ->GetVtkImageViewer2();
196                         vtkCamera *camera = IV2->GetRenderer()->GetActiveCamera();
197
198 //EED 17Avril2009       
199 /*                      
200                         camera->SetViewUp               ( spx*0                 , -spy*1                        , spz*0         );
201                         camera->SetPosition             ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , -spz*10000    ); 
202                         camera->SetFocalPoint   ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*0         ); 
203 */ 
204                         camera->SetViewUp               ( spx*0                 , spy*1                 , spz*0         );
205                         camera->SetPosition             ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*10000     ); 
206                         camera->SetFocalPoint   ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*0         ); 
207                         
208                         
209                         camera->SetClippingRange( 0.01                  , 1000000 );
210                         camera->ComputeViewPlaneNormal();
211                         camera->SetParallelScale( spx*(x2-x1)/3.0 );
212                         
213                         // text information over the graphic window
214                         if(_vtkIinfoTextImage == NULL){
215                                 _vtkIinfoTextImage              = new vtkInfoTextImage();
216                                 _vtkIinfoTextImageInteractor    = new vtkInfoTextImageInteractor();                             
217                                 ((vtkInteractorStyleBaseView*)this->GetInteractorStyleBaseView())->AddInteractorStyleMaracas(_vtkIinfoTextImageInteractor);
218                         }
219                         _vtkIinfoTextImage->SetWxVtk2DBaseView(this);
220                         _vtkIinfoTextImage->SetMarImageData( GetVtkBaseData()->GetMarImageData() );
221                         _vtkIinfoTextImageInteractor->SetModelVtkInfoTextImage(_vtkIinfoTextImage);                             
222                         _vtkIinfoTextImage->Configure();
223                         
224                 } // okimage
225         } // imageData
226 }
227
228 //-------------------------------------------------------------------
229
230 int     wxVtk2DBaseView::GetActualSlice()  // virtual 
231 {
232    return (int)(_vtkbasedata->GetZ());
233 }
234
235 //-------------------------------------------------------------------
236 void wxVtk2DBaseView::SetActualSlice(int slice)  // Virtual
237 {
238    _vtkbasedata->SetZ(slice);
239 }
240
241 //-------------------------------------------------------------------
242
243 vtkBaseData *wxVtk2DBaseView::GetVtkBaseData()
244 {
245    return _vtkbasedata;
246 }
247
248 //-------------------------------------------------------------------
249
250 void wxVtk2DBaseView::SetVtkBaseData(vtkBaseData *vtkbasedata)
251 {
252    _vtkbasedata=vtkbasedata;
253 }
254
255 //-------------------------------------------------------------------
256
257 void wxVtk2DBaseView::Refresh()
258 {
259    int z = (int)(GetVtkBaseData()->GetZ());
260   _imageViewer2XYZ->SetZSlice( z ); 
261
262    wxVtkBaseView::Refresh();
263 }
264
265 //-------------------------------------------------------------------
266
267 void wxVtk2DBaseView::SetInteractorStyleImage(vtkInteractorStyleBaseView *interactorstylebaseview)
268 {
269         SetInteractorStyleBaseView(interactorstylebaseview);
270
271         wxVTKRenderWindowInteractor *iren = GetWxVTKRenderWindowInteractor();
272         interactorstylebaseview->SetInteractor ( iren );
273         iren->SetInteractorStyle(interactorstylebaseview);
274         interactorstylebaseview->SetwxVtkBaseView(this);        
275
276         vtkMaracasImageViewer2Callback * cbk = vtkMaracasImageViewer2Callback::New();
277         cbk->IV = _imageViewer2XYZ->GetVtkImageViewer2();
278         interactorstylebaseview->AddObserver( vtkCommand::WindowLevelEvent, cbk );
279         interactorstylebaseview->AddObserver( vtkCommand::StartWindowLevelEvent, cbk );
280         interactorstylebaseview->AddObserver( vtkCommand::ResetWindowLevelEvent, cbk );
281         cbk->Delete();
282 }
283
284 //---------------------------------------------------------------------------
285 vtkRenderer* wxVtk2DBaseView::GetRenderer()     // virtual 
286 {
287    return _imageViewer2XYZ->GetVtkImageViewer2()->GetRenderer();
288 }
289 //---------------------------------------------------------------------------
290 vtkRenderWindow* wxVtk2DBaseView::GetRenWin()           // virtual
291 {
292    return _imageViewer2XYZ->GetVtkImageViewer2()->GetRenderWindow();
293 }
294
295 //-------------------------------------------------------------------
296
297 void wxVtk2DBaseView::GetSpacing(double spc[3])  // virtual
298 {
299    vtkImageData *imageData      = GetVtkBaseData()->GetImageData();
300    if(imageData){
301         imageData->GetSpacing(spc);
302    }else{
303          spc[0] = 0; 
304          spc[1] = 0;
305          spc[2] = 0;
306    }
307 }
308
309 void wxVtk2DBaseView::setColorTransferFunction(vtkColorTransferFunction* colortable){
310         if(_imageViewer2XYZ!=NULL){
311                 _imageViewer2XYZ->setColorTransferFunction(colortable);
312                 this->Refresh();
313         }
314 }
315
316 void wxVtk2DBaseView::setWindowLevel(double level){
317 //      _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow(level);  
318
319         vtkImageMapToWindowLevelColors* imagemaptowindowlevel = _imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel();
320         imagemaptowindowlevel->SetWindow(level);
321         this->Refresh();
322 }
323
324 void wxVtk2DBaseView::setColorLevel(double level){
325 //      _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel(level);
326         vtkImageMapToWindowLevelColors* imagemaptowindowlevel = _imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel();
327         imagemaptowindowlevel->SetLevel(level);
328         this->Refresh();
329 }