]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/wxVtk2DBaseView.cxx
changes in viewers, now is possible to initialize them with out an image but the...
[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                 imageData->UpdateInformation();
161                 imageData->SetUpdateExtent( imageData->GetWholeExtent());
162                 imageData->Update();
163                 if (okimage==true){
164                         imageData->GetSpacing (spx,spy,spz);
165                         imageData->GetExtent (x1,x2,y1,y2,z1,z2);
166                         _imageViewer2XYZ->GetVtkImageViewer2()->SetInput(imageData );
167                         _imageViewer2XYZ->SetExtentDimension(x1,x2,y1,y2,z1,z2);
168                         double range[2];
169                         imageData->GetScalarRange(range);
170                         if (range[1]<20000){
171                                  _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow( (range[1]-range[0])/2 );
172                                  _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel( (range[1]+range[0])/4 );
173                         } else {
174                                  _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow( 1000 );
175                                  _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel( 500 );
176                         }
177 // EED 31 Janvier 2007
178 //vtkImageActor *vtkimageactor = _imageViewer2XYZ->GetVtkImageViewer2()->GetImageActor ();
179 //vtkimageactor->InterpolateOff ();
180 //vtkLookupTable * _collookup = vtkLookupTable::New( );
181 //_collookup->SetNumberOfColors( 256 );
182 //_collookup->SetTableRange( 0 , 255 );
183 //_collookup->Build( );
184 //_collookup->SetTableValue( 0  , 1 , 0 , 0 , 1 );
185 //_collookup->SetTableValue(128 , 0 , 0 , 1 , 1 );
186 //_collookup->SetTableValue(255 , 0 , 1 , 0 , 1 );
187 //_imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel ()->SetLookupTable(_collookup );
188
189
190 // EED 17 Oct 2007
191 //                      SetInteractorStyleImage( vtkInteractorStyleBaseView2D::New() );
192
193
194                         vtkImageViewer2 *IV2=_imageViewer2XYZ->GetVtkImageViewer2();
195                         vtkCamera *camera = IV2->GetRenderer()->GetActiveCamera();
196
197 //EED 17Avril2009       
198 /*                      
199                         camera->SetViewUp               ( spx*0                 , -spy*1                        , spz*0         );
200                         camera->SetPosition             ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , -spz*10000    ); 
201                         camera->SetFocalPoint   ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*0         ); 
202 */ 
203                         camera->SetViewUp               ( spx*0                 , spy*1                 , spz*0         );
204                         camera->SetPosition             ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*10000     ); 
205                         camera->SetFocalPoint   ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*0         ); 
206                         
207                         
208                         camera->SetClippingRange( 0.01                  , 1000000 );
209                         camera->ComputeViewPlaneNormal();
210                         camera->SetParallelScale( spx*(x2-x1)/3.0 );
211                         
212                         // text information over the graphic window
213                         if(_vtkIinfoTextImage == NULL){
214                                 _vtkIinfoTextImage              = new vtkInfoTextImage();
215                                 _vtkIinfoTextImageInteractor    = new vtkInfoTextImageInteractor();                             
216                                 ((vtkInteractorStyleBaseView*)this->GetInteractorStyleBaseView())->AddInteractorStyleMaracas(_vtkIinfoTextImageInteractor);
217                         }
218                         _vtkIinfoTextImage->SetWxVtk2DBaseView(this);
219                         _vtkIinfoTextImage->SetMarImageData( GetVtkBaseData()->GetMarImageData() );
220                         _vtkIinfoTextImageInteractor->SetModelVtkInfoTextImage(_vtkIinfoTextImage);                             
221                         _vtkIinfoTextImage->Configure();
222                         
223                 } // okimage
224         } // imageData
225 }
226
227 //-------------------------------------------------------------------
228
229 int     wxVtk2DBaseView::GetActualSlice()  // virtual 
230 {
231    return (int)(_vtkbasedata->GetZ());
232 }
233
234 //-------------------------------------------------------------------
235 void wxVtk2DBaseView::SetActualSlice(int slice)  // Virtual
236 {
237    _vtkbasedata->SetZ(slice);
238 }
239
240 //-------------------------------------------------------------------
241
242 vtkBaseData *wxVtk2DBaseView::GetVtkBaseData()
243 {
244    return _vtkbasedata;
245 }
246
247 //-------------------------------------------------------------------
248
249 void wxVtk2DBaseView::SetVtkBaseData(vtkBaseData *vtkbasedata)
250 {
251    _vtkbasedata=vtkbasedata;
252 }
253
254 //-------------------------------------------------------------------
255
256 void wxVtk2DBaseView::Refresh()
257 {
258    int z = (int)(GetVtkBaseData()->GetZ());
259   _imageViewer2XYZ->SetZSlice( z ); 
260
261    wxVtkBaseView::Refresh();
262 }
263
264 //-------------------------------------------------------------------
265
266 void wxVtk2DBaseView::SetInteractorStyleImage(vtkInteractorStyleBaseView *interactorstylebaseview)
267 {
268         SetInteractorStyleBaseView(interactorstylebaseview);
269
270         wxVTKRenderWindowInteractor *iren = GetWxVTKRenderWindowInteractor();
271         interactorstylebaseview->SetInteractor ( iren );
272         iren->SetInteractorStyle(interactorstylebaseview);
273         interactorstylebaseview->SetwxVtkBaseView(this);        
274
275         vtkMaracasImageViewer2Callback * cbk = vtkMaracasImageViewer2Callback::New();
276         cbk->IV = _imageViewer2XYZ->GetVtkImageViewer2();
277         interactorstylebaseview->AddObserver( vtkCommand::WindowLevelEvent, cbk );
278         interactorstylebaseview->AddObserver( vtkCommand::StartWindowLevelEvent, cbk );
279         interactorstylebaseview->AddObserver( vtkCommand::ResetWindowLevelEvent, cbk );
280         cbk->Delete();
281 }
282
283 //---------------------------------------------------------------------------
284 vtkRenderer* wxVtk2DBaseView::GetRenderer()     // virtual 
285 {
286    return _imageViewer2XYZ->GetVtkImageViewer2()->GetRenderer();
287 }
288 //---------------------------------------------------------------------------
289 vtkRenderWindow* wxVtk2DBaseView::GetRenWin()           // virtual
290 {
291    return _imageViewer2XYZ->GetVtkImageViewer2()->GetRenderWindow();
292 }
293
294 //-------------------------------------------------------------------
295
296 void wxVtk2DBaseView::GetSpacing(double spc[3])  // virtual
297 {
298    vtkImageData *imageData      = GetVtkBaseData()->GetImageData();
299    if(imageData){
300         imageData->GetSpacing(spc);
301    }else{
302          spc[0] = 0; 
303          spc[1] = 0;
304          spc[2] = 0;
305    }
306 }
307
308 void wxVtk2DBaseView::setColorTransferFunction(vtkColorTransferFunction* colortable){
309         if(_imageViewer2XYZ!=NULL){
310                 _imageViewer2XYZ->setColorTransferFunction(colortable);
311                 this->Refresh();
312         }
313 }
314
315 void wxVtk2DBaseView::setWindowLevel(double level){
316 //      _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow(level);  
317
318         vtkImageMapToWindowLevelColors* imagemaptowindowlevel = _imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel();
319         imagemaptowindowlevel->SetWindow(level);
320         this->Refresh();
321 }
322
323 void wxVtk2DBaseView::setColorLevel(double level){
324 //      _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel(level);
325         vtkImageMapToWindowLevelColors* imagemaptowindowlevel = _imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel();
326         imagemaptowindowlevel->SetLevel(level);
327         this->Refresh();
328 }