1 #include "wxVtk2DBaseView.h"
3 #include "vtkInfoTextImage.h"
4 #include "vtkInteractorStyleBaseView2D.h"
5 #include "vtkInfoTextImageInteractor.h"
8 wxVtk2DBaseView::wxVtk2DBaseView(wxWindow *parent)
11 _imageViewer2XYZ = NULL;
12 _vtkIinfoTextImage = NULL;
16 //-------------------------------------------------------------------
17 wxVtk2DBaseView::~wxVtk2DBaseView()
19 if (_vtkIinfoTextImage!=NULL)
21 delete _vtkIinfoTextImage;
24 if (_imageViewer2XYZ!=NULL)
26 delete _imageViewer2XYZ;
30 //-------------------------------------------------------------------
31 void wxVtk2DBaseView::TransformCoordinate_spacing_ViewToModel(double &X,double &Y, double &Z) // virtual
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();
39 image->GetSpacing(spc);
53 //-------------------------------------------------------------------
54 void wxVtk2DBaseView::TransformCoordinate_spacing_ModelToView(double &X,double &Y, double &Z) // virtual
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();
62 image->GetSpacing(spc);
75 //-------------------------------------------------------------------
76 void wxVtk2DBaseView::ResetView()
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();
83 wxVTKRenderWindowInteractor *iren = GetWxVTKRenderWindowInteractor();
84 vtkImageData *imageData = GetVtkBaseData()->GetImageData();
86 imageData->UpdateInformation();
87 imageData->SetUpdateExtent( imageData->GetWholeExtent());
89 _imageViewer2XYZ->GetVtkImageViewer2()->SetInput(imageData );
90 imageData->GetSpacing (spx,spy,spz);
91 imageData->GetExtent (x1,x2,y1,y2,z1,z2);
95 _imageViewer2XYZ -> SetExtentDimension(x1,x2,y1,y2,z1,z2);
96 _imageViewer2XYZ -> GetVtkImageViewer2()->SetupInteractor ( iren );
99 _imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel()->Modified();
101 _imageViewer2XYZ->GetVtkImageViewer2()->Render();
104 //RaC 04-2010 Look for the description of new changes in vtkInteractorStyleBaseView2D constructor.
107 // SetInteractorStyleImage( vtkInteractorStyleBaseView2D::New() );
110 vtkInteractorStyleBaseView2D *style2D = vtkInteractorStyleBaseView2D::New();
112 manualInteractorWindowLevel *_manualinteractorwindowlevel= new manualInteractorWindowLevel();
113 style2D->SetInteractorWindowLevel( _manualinteractorwindowlevel );
115 vtkInteractorScrollZ *_vtkInteractorScrollZ = new vtkInteractorScrollZ();
116 style2D->SetInteractorScrollZ(_vtkInteractorScrollZ);
118 SetInteractorStyleImage( style2D );
127 //-------------------------------------------------------------------
128 void wxVtk2DBaseView::SetImageToVtkViewer(vtkImageData *imageData)
130 if (_imageViewer2XYZ!=NULL)
132 _imageViewer2XYZ->GetVtkImageViewer2()->SetInput( imageData );
133 } // if _imageViewer2XYZ
137 //-------------------------------------------------------------------
138 void wxVtk2DBaseView::Configure(bool okimage)
141 int x1,x2,y1,y2,z1,z2;
142 wxVtkBaseView::Configure();
145 if (_imageViewer2XYZ==NULL)
147 _imageViewer2XYZ = new vtkImageViewer2_XYZ();
148 wxVTKRenderWindowInteractor *iren = GetWxVTKRenderWindowInteractor();
149 _imageViewer2XYZ -> GetVtkImageViewer2()->SetupInteractor ( iren );
152 //RaC 04-2010 Look for the description of new changes in vtkInteractorStyleBaseView2D constructor.
155 // SetInteractorStyleImage( vtkInteractorStyleBaseView2D::New() );
158 vtkInteractorStyleBaseView2D *style2D = vtkInteractorStyleBaseView2D::New();
160 manualInteractorWindowLevel *_manualinteractorwindowlevel= new manualInteractorWindowLevel();
161 style2D->SetInteractorWindowLevel( _manualinteractorwindowlevel );
163 vtkInteractorScrollZ *_vtkInteractorScrollZ = new vtkInteractorScrollZ();
164 style2D->SetInteractorScrollZ(_vtkInteractorScrollZ);
166 SetInteractorStyleImage( style2D );
173 vtkImageData *imageData = GetVtkBaseData()->GetMarImageData()->GetImageData();
176 imageData->UpdateInformation();
177 imageData->SetUpdateExtent( imageData->GetWholeExtent());
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);
185 /*EED Borrame, now is syncroniced in vtkBaseData for all windows
187 imageData->GetScalarRange(range);
189 _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow( (range[1]-range[0])/2 );
190 _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel( (range[1]+range[0])/4 );
192 _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow( 1000 );
193 _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel( 500 );
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 );
211 // SetInteractorStyleImage( vtkInteractorStyleBaseView2D::New() );
214 vtkImageViewer2 *IV2 = _imageViewer2XYZ->GetVtkImageViewer2();
215 vtkCamera *camera = IV2->GetRenderer()->GetActiveCamera();
218 //EED 21 mars 2012 FLIP problem ..PLOP..
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 );
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 );
231 camera->SetClippingRange( 0.01 , 1000000 );
232 camera->ComputeViewPlaneNormal();
233 camera->SetParallelScale( spx*(x2-x1)/3.0 );
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);
241 _vtkIinfoTextImage->SetWxVtk2DBaseView(this);
242 _vtkIinfoTextImage->SetMarImageData( GetVtkBaseData()->GetMarImageData() );
243 _vtkIinfoTextImageInteractor->SetModelVtkInfoTextImage(_vtkIinfoTextImage);
244 _vtkIinfoTextImage->Configure();
250 //-------------------------------------------------------------------
252 int wxVtk2DBaseView::GetActualSlice() // virtual
254 return (int)(_vtkbasedata->GetZ());
257 //-------------------------------------------------------------------
258 void wxVtk2DBaseView::SetActualSlice(int slice) // Virtual
260 _vtkbasedata->SetZ(slice);
263 //-------------------------------------------------------------------
265 vtkBaseData *wxVtk2DBaseView::GetVtkBaseData()
270 //-------------------------------------------------------------------
272 void wxVtk2DBaseView::SetVtkBaseData(vtkBaseData *vtkbasedata)
274 _vtkbasedata=vtkbasedata;
277 //-------------------------------------------------------------------
278 void wxVtk2DBaseView::UpdateColorWindowLevel()
283 // vtkImageViewer2 *vtkimageviewer2 = _imageViewer2XYZ->GetVtkImageViewer2();
286 vtkImageMapToWindowLevelColors* imagemaptowindowlevel = _imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel();
287 imagemaptowindowlevel->SetWindow( _vtkbasedata->GetColorWindow() );
288 imagemaptowindowlevel->SetLevel( _vtkbasedata->GetColorLevel() );
291 // vtkimageviewer2->SetColorWindow( _vtkbasedata->GetColorWindow() );
292 // vtkimageviewer2->SetColorLevel( _vtkbasedata->GetColorLevel() );
293 _imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel()->Modified();
296 //-------------------------------------------------------------------
297 void wxVtk2DBaseView::Refresh()
299 int z = (int)(GetVtkBaseData()->GetZ());
300 _imageViewer2XYZ->SetZSlice( z );
302 UpdateColorWindowLevel();
303 wxVtkBaseView::Refresh();
306 //-------------------------------------------------------------------
307 void wxVtk2DBaseView::SetInteractorStyleImage(vtkInteractorStyleBaseView *interactorstylebaseview)
309 SetInteractorStyleBaseView(interactorstylebaseview);
311 wxVTKRenderWindowInteractor *iren = GetWxVTKRenderWindowInteractor();
312 interactorstylebaseview->SetInteractor ( iren );
313 iren->SetInteractorStyle(interactorstylebaseview);
314 interactorstylebaseview->SetwxVtkBaseView(this);
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 );
324 //---------------------------------------------------------------------------
325 vtkRenderer* wxVtk2DBaseView::GetRenderer() // virtual
327 return _imageViewer2XYZ->GetVtkImageViewer2()->GetRenderer();
330 //---------------------------------------------------------------------------
331 vtkRenderWindow* wxVtk2DBaseView::GetRenWin() // virtual
333 return _imageViewer2XYZ->GetVtkImageViewer2()->GetRenderWindow();
336 //-------------------------------------------------------------------
337 void wxVtk2DBaseView::GetSpacing(double spc[3]) // virtual
339 vtkImageData *imageData = GetVtkBaseData()->GetImageData();
342 imageData->GetSpacing(spc);
350 //-------------------------------------------------------------------
351 void wxVtk2DBaseView::setColorTransferFunction(vtkColorTransferFunction* colortable)
353 if(_imageViewer2XYZ!=NULL)
355 _imageViewer2XYZ->setColorTransferFunction(colortable);
360 //-------------------------------------------------------------------
361 void wxVtk2DBaseView::SetColorWindow(double level)
363 // _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow(level);
364 _vtkbasedata->SetColorWindow(level);
368 //-------------------------------------------------------------------
369 void wxVtk2DBaseView::SetColorLevel(double level)
371 // _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel(level);
372 _vtkbasedata->SetColorLevel(level);
376 //-------------------------------------------------------------------
377 int wxVtk2DBaseView::GetDirection() // virtual