1 /*# ---------------------------------------------------------------------
3 # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image
5 # Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
6 # Previous Authors : Laurent Guigues, Jean-Pierre Roux
7 # CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil
9 # This software is governed by the CeCILL-B license under French law and
10 # abiding by the rules of distribution of free software. You can use,
11 # modify and/ or redistribute the software under the terms of the CeCILL-B
12 # license as circulated by CEA, CNRS and INRIA at the following URL
13 # http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
14 # or in the file LICENSE.txt.
16 # As a counterpart to the access to the source code and rights to copy,
17 # modify and redistribute granted by the license, users are provided only
18 # with a limited warranty and the software's author, the holder of the
19 # economic rights, and the successive licensors have only limited
22 # The fact that you are presently reading this means that you have had
23 # knowledge of the CeCILL-B license and that you accept its terms.
24 # ------------------------------------------------------------------------ */
26 #include "wxVtk2DBaseView.h"
28 #include "vtkInfoTextImage.h"
29 #include "vtkInteractorStyleBaseView2D.h"
30 #include "vtkInfoTextImageInteractor.h"
31 #include "vtkImageActor.h"
34 wxVtk2DBaseView::wxVtk2DBaseView(wxWindow *parent)
35 :wxVtkBaseView(parent)
37 _imageViewer2XYZ = NULL;
38 _vtkIinfoTextImage = NULL;
42 //-------------------------------------------------------------------
43 wxVtk2DBaseView::~wxVtk2DBaseView()
45 if (_vtkIinfoTextImage!=NULL)
47 delete _vtkIinfoTextImage;
49 if (_imageViewer2XYZ!=NULL)
51 delete _imageViewer2XYZ;
55 //-------------------------------------------------------------------
56 void wxVtk2DBaseView::TransformCoordinate_spacing_ViewToModel(double &X,double &Y, double &Z) // virtual
60 // GetVtkBaseData()->GetImageData()->GetSpacing(spc);
61 //JCP 04/08/10 W/O Image this->_imageViewer2XYZ->GetVtkImageViewer2()->GetInput()->GetSpacing(spc);
62 vtkImageData* image = this->_imageViewer2XYZ->GetVtkImageViewer2()->GetInput();
65 image->GetSpacing(spc);
76 //-------------------------------------------------------------------
77 void wxVtk2DBaseView::TransformCoordinate_spacing_ModelToView(double &X,double &Y, double &Z) // virtual
81 // GetVtkBaseData()->GetImageData()->GetSpacing(spc);
82 //JCP 04/08/10 W/O Image this->_imageViewer2XYZ->GetVtkImageViewer2()->GetInput()->GetSpacing(spc);
83 vtkImageData* image = this->_imageViewer2XYZ->GetVtkImageViewer2()->GetInput();
85 image->GetSpacing(spc);
97 //-------------------------------------------------------------------
98 void wxVtk2DBaseView::ResetView()
100 printf("EED wxVtk2DBaseView::ResetView Start\n");
101 double spx = 0,spy = 0,spz = 0;
102 int x1 = 1,x2 = 1,y1 = 1,y2 = 1,z1 = 1,z2 = 1;
103 wxVtkBaseView::Configure();
104 crea::wxVTKRenderWindowInteractor *iren = GetWxVTKRenderWindowInteractor();
105 vtkImageData *imageData = GetVtkBaseData()->GetImageData();
108 //EED 2017-01-01 Migration VTK7
109 #if VTK_MAJOR_VERSION <= 5
110 imageData->UpdateInformation();
111 imageData->SetUpdateExtent( imageData->GetWholeExtent());
113 _imageViewer2XYZ->GetVtkImageViewer2()->SetInput(imageData );
115 _imageViewer2XYZ->GetVtkImageViewer2()->SetInputData(imageData );
117 imageData->GetSpacing (spx,spy,spz);
118 imageData->GetExtent (x1,x2,y1,y2,z1,z2);
120 printf("//EED wxVtk2DBaseView::ResetView %d %d %d %d %d %d \n",x1,x2,y1,y2,z1,z2);
121 _imageViewer2XYZ -> SetExtentDimension(x1,x2,y1,y2,z1,z2);
122 _imageViewer2XYZ -> GetVtkImageViewer2()->SetupInteractor ( iren );
125 _imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel()->Modified();
127 //EED2120-06-23 _imageViewer2XYZ->GetVtkImageViewer2()->Render();
130 //RaC 04-2010 Look for the description of new changes in vtkInteractorStyleBaseView2D constructor.
133 // SetInteractorStyleImage( vtkInteractorStyleBaseView2D::New() );
136 vtkInteractorStyleBaseView2D *style2D = vtkInteractorStyleBaseView2D::New();
138 manualInteractorWindowLevel *_manualinteractorwindowlevel= new manualInteractorWindowLevel();
139 style2D->SetInteractorWindowLevel( _manualinteractorwindowlevel );
141 vtkInteractorScrollZ *_vtkInteractorScrollZ = new vtkInteractorScrollZ();
142 style2D->SetInteractorScrollZ(_vtkInteractorScrollZ);
144 vtkInteractorZoomCamera *_vtkInteractorZoomCamera = new vtkInteractorZoomCamera();
145 style2D->SetInteractorZoomCamera(_vtkInteractorZoomCamera);
149 SetInteractorStyleImage( style2D );
153 printf("EED wxVtk2DBaseView::ResetView End\n");
157 //-------------------------------------------------------------------
158 void wxVtk2DBaseView::SetImageToVtkViewer(vtkImageData *imageData)
161 if (_imageViewer2XYZ!=NULL)
163 //EED 2017-01-01 Migration VTK7
164 #if VTK_MAJOR_VERSION <= 5
166 imageData->GetWholeExtent(ext);
167 _imageViewer2XYZ->SetExtentDimension( ext[0],ext[1],ext[2],ext[3],ext[4],ext[5] );
168 _imageViewer2XYZ->GetVtkImageViewer2()->SetInput( imageData );
170 imageData->GetExtent(ext);
171 _imageViewer2XYZ->SetExtentDimension( ext[0],ext[1],ext[2],ext[3],ext[4],ext[5] );
172 _imageViewer2XYZ->GetVtkImageViewer2()->SetInputData( imageData );
174 } // if _imageViewer2XYZ
176 GetRenderer()->GetActiveCamera()->SetClippingRange(0.01, 1000000);
180 //-------------------------------------------------------------------
181 void wxVtk2DBaseView::Configure(bool okimage)
184 int x1,x2,y1,y2,z1,z2;
185 wxVtkBaseView::Configure();
188 if (_imageViewer2XYZ==NULL)
190 _imageViewer2XYZ = new vtkImageViewer2_XYZ();
191 crea::wxVTKRenderWindowInteractor *iren = GetWxVTKRenderWindowInteractor();
192 _imageViewer2XYZ -> GetVtkImageViewer2()->SetupInteractor ( iren );
195 //RaC 04-2010 Look for the description of new changes in vtkInteractorStyleBaseView2D constructor.
198 // SetInteractorStyleImage( vtkInteractorStyleBaseView2D::New() );
201 vtkInteractorStyleBaseView2D *style2D = vtkInteractorStyleBaseView2D::New();
203 manualInteractorWindowLevel *_manualinteractorwindowlevel= new manualInteractorWindowLevel();
204 style2D->SetInteractorWindowLevel( _manualinteractorwindowlevel );
206 vtkInteractorScrollZ *_vtkInteractorScrollZ = new vtkInteractorScrollZ();
207 style2D->SetInteractorScrollZ(_vtkInteractorScrollZ);
209 vtkInteractorZoomCamera *_vtkInteractorZoomCamera = new vtkInteractorZoomCamera();
210 style2D->SetInteractorZoomCamera(_vtkInteractorZoomCamera);
212 SetInteractorStyleImage( style2D );
218 vtkImageData *imageData = GetVtkBaseData()->GetMarImageData()->GetImageData();
222 //EED 2017-01-01 Migration VTK7
223 #if VTK_MAJOR_VERSION <= 5
224 imageData->UpdateInformation();
225 imageData->SetUpdateExtent( imageData->GetWholeExtent());
232 imageData->GetSpacing (spx,spy,spz);
233 imageData->GetExtent (x1,x2,y1,y2,z1,z2);
234 SetImageToVtkViewer(imageData);
235 _imageViewer2XYZ->SetExtentDimension(x1,x2,y1,y2,z1,z2);
237 /*EED Borrame, now is syncroniced in vtkBaseData for all windows
239 imageData->GetScalarRange(range);
241 _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow( (range[1]-range[0])/2 );
242 _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel( (range[1]+range[0])/4 );
244 _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow( 1000 );
245 _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel( 500 );
249 // EED 31 Janvier 2007
250 //vtkImageActor *vtkimageactor = _imageViewer2XYZ->GetVtkImageViewer2()->GetImageActor ();
251 //vtkimageactor->InterpolateOff ();
252 //vtkLookupTable * _collookup = vtkLookupTable::New( );
253 //_collookup->SetNumberOfColors( 256 );
254 //_collookup->SetTableRange( 0 , 255 );
255 //_collookup->Build( );
256 //_collookup->SetTableValue( 0 , 1 , 0 , 0 , 1 );
257 //_collookup->SetTableValue(128 , 0 , 0 , 1 , 1 );
258 //_collookup->SetTableValue(255 , 0 , 1 , 0 , 1 );
259 //_imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel ()->SetLookupTable(_collookup );
262 // SetInteractorStyleImage( vtkInteractorStyleBaseView2D::New() );
264 vtkImageViewer2 *IV2 = _imageViewer2XYZ->GetVtkImageViewer2();
265 vtkCamera *camera = IV2->GetRenderer()->GetActiveCamera();
268 //EED 21 mars 2012 FLIP problem ..PLOP..
271 camera->SetViewUp ( spx*0 , -spy*1 , spz*0 );
272 camera->SetPosition ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , -spz*10000 );
273 camera->SetFocalPoint ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*0 );
275 camera->SetViewUp ( spx*0 , spy*1 , spz*0 );
276 camera->SetPosition ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*10000 );
277 camera->SetFocalPoint ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*0 );
281 camera->SetClippingRange( 0.01 , 1000000 );
282 camera->ComputeViewPlaneNormal();
284 double cameraparallelScale=spx*(x2-x1)/3.0;
285 camera->SetParallelScale( cameraparallelScale );
286 GetVtkBaseData()->SetCameraParallelScale( cameraparallelScale );
288 // text information over the graphic window
289 if(_vtkIinfoTextImage == NULL){
290 _vtkIinfoTextImage = new vtkInfoTextImage();
291 _vtkIinfoTextImageInteractor = new vtkInfoTextImageInteractor();
292 ((vtkInteractorStyleBaseView*)this->GetInteractorStyleBaseView())->AddInteractorStyleMaracas(_vtkIinfoTextImageInteractor);
294 _vtkIinfoTextImage->SetWxVtk2DBaseView(this);
295 _vtkIinfoTextImage->SetMarImageData( GetVtkBaseData()->GetMarImageData() );
296 _vtkIinfoTextImageInteractor->SetModelVtkInfoTextImage(_vtkIinfoTextImage);
297 _vtkIinfoTextImage->Configure();
303 //-------------------------------------------------------------------
305 int wxVtk2DBaseView::GetActualSlice() // virtual
307 return (int)(GetVtkBaseData()->GetZ());
310 //-------------------------------------------------------------------
311 void wxVtk2DBaseView::SetActualSlice(int slice) // Virtual
313 GetVtkBaseData()->SetZ(slice);
316 //-------------------------------------------------------------------
317 void wxVtk2DBaseView::UpdateColorWindowLevel()
322 vtkImageMapToWindowLevelColors* imagemaptowindowlevel = _imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel();
323 imagemaptowindowlevel->SetWindow( GetVtkBaseData()->GetColorWindow() );
324 imagemaptowindowlevel->SetLevel( GetVtkBaseData()->GetColorLevel() );
325 _imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel()->Modified();
328 //-------------------------------------------------------------------
329 void wxVtk2DBaseView::UpdateCameraParallelScale()
331 vtkCamera *camera =_imageViewer2XYZ->GetVtkImageViewer2()->GetRenderer()->GetActiveCamera();
332 camera->SetParallelScale( GetVtkBaseData()->GetCameraParallelScale() );
335 //-------------------------------------------------------------------
336 void wxVtk2DBaseView::Refresh()
338 printf("EED wxVtk2DBaseView::Refresh Start\n");
339 int z = (int)(GetVtkBaseData()->GetZ());
340 _imageViewer2XYZ->SetZSlice( z );
342 vtkImageActor *imageactor = _imageViewer2XYZ->GetVtkImageViewer2()->GetImageActor();
343 imageactor->SetInterpolate( GetVtkBaseData()->GetInterpolate() );
345 UpdateColorWindowLevel();
346 UpdateCameraParallelScale();
347 wxVtkBaseView::Refresh();
348 printf("EED wxVtk2DBaseView::Refresh End\n");
351 //-------------------------------------------------------------------
352 void wxVtk2DBaseView::SetInteractorStyleImage(vtkInteractorStyleBaseView *interactorstylebaseview)
354 SetInteractorStyleBaseView(interactorstylebaseview);
355 crea::wxVTKRenderWindowInteractor *iren = GetWxVTKRenderWindowInteractor();
356 interactorstylebaseview->SetInteractor ( iren );
357 iren->SetInteractorStyle(interactorstylebaseview);
358 interactorstylebaseview->SetwxVtkBaseView(this);
359 vtkMaracasImageViewer2Callback * cbk = vtkMaracasImageViewer2Callback::New();
360 cbk->IV = _imageViewer2XYZ->GetVtkImageViewer2();
361 interactorstylebaseview->AddObserver( vtkCommand::WindowLevelEvent, cbk );
362 interactorstylebaseview->AddObserver( vtkCommand::StartWindowLevelEvent, cbk );
363 interactorstylebaseview->AddObserver( vtkCommand::ResetWindowLevelEvent, cbk );
367 //---------------------------------------------------------------------------
368 vtkRenderer* wxVtk2DBaseView::GetRenderer() // virtual
370 return _imageViewer2XYZ->GetVtkImageViewer2()->GetRenderer();
373 //---------------------------------------------------------------------------
374 vtkRenderWindow* wxVtk2DBaseView::GetRenWin() // virtual
376 return _imageViewer2XYZ->GetVtkImageViewer2()->GetRenderWindow();
379 //-------------------------------------------------------------------
380 void wxVtk2DBaseView::GetSpacing(double spc[3]) // virtual
382 vtkImageData *imageData = GetVtkBaseData()->GetImageData();
385 imageData->GetSpacing(spc);
393 //-------------------------------------------------------------------
394 void wxVtk2DBaseView::setColorTransferFunction(vtkColorTransferFunction* colortable)
396 if(_imageViewer2XYZ!=NULL)
398 _imageViewer2XYZ->setColorTransferFunction(colortable);
403 //-------------------------------------------------------------------
404 void wxVtk2DBaseView::SetColorWindow(double level)
406 // _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow(level);
407 GetVtkBaseData()->SetColorWindow(level);
411 //-------------------------------------------------------------------
412 void wxVtk2DBaseView::SetColorLevel(double level)
414 // _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel(level);
415 GetVtkBaseData()->SetColorLevel(level);
419 //-------------------------------------------------------------------
420 void wxVtk2DBaseView::SetInterpolate(bool iterpolate)
422 GetVtkBaseData()->SetInterpolate( iterpolate );
426 //-------------------------------------------------------------------
427 int wxVtk2DBaseView::GetDirection() // virtual
432 //-------------------------------------------------------------------
433 void wxVtk2DBaseView::SetOpacityText(double opacity)
435 if (_vtkIinfoTextImage!=NULL)
437 _vtkIinfoTextImage->SetOpacity( opacity );