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"
33 wxVtk2DBaseView::wxVtk2DBaseView(wxWindow *parent)
34 :wxVtkBaseView(parent)
36 _imageViewer2XYZ = NULL;
37 _vtkIinfoTextImage = NULL;
41 //-------------------------------------------------------------------
42 wxVtk2DBaseView::~wxVtk2DBaseView()
44 if (_vtkIinfoTextImage!=NULL)
46 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();
64 image->GetSpacing(spc);
78 //-------------------------------------------------------------------
79 void wxVtk2DBaseView::TransformCoordinate_spacing_ModelToView(double &X,double &Y, double &Z) // virtual
83 // GetVtkBaseData()->GetImageData()->GetSpacing(spc);
84 //JCP 04/08/10 W/O Image this->_imageViewer2XYZ->GetVtkImageViewer2()->GetInput()->GetSpacing(spc);
85 vtkImageData* image = this->_imageViewer2XYZ->GetVtkImageViewer2()->GetInput();
87 image->GetSpacing(spc);
100 //-------------------------------------------------------------------
101 void wxVtk2DBaseView::ResetView()
103 printf("EED wxVtk2DBaseView::ResetView");
104 double spx = 0,spy = 0,spz = 0;
105 int x1 = 1,x2 = 1,y1 = 1,y2 = 1,z1 = 1,z2 = 1;
106 wxVtkBaseView::Configure();
108 wxVTKRenderWindowInteractor *iren = GetWxVTKRenderWindowInteractor();
109 vtkImageData *imageData = GetVtkBaseData()->GetImageData();
111 imageData->UpdateInformation();
112 imageData->SetUpdateExtent( imageData->GetWholeExtent());
114 _imageViewer2XYZ->GetVtkImageViewer2()->SetInput(imageData );
115 imageData->GetSpacing (spx,spy,spz);
116 imageData->GetExtent (x1,x2,y1,y2,z1,z2);
120 _imageViewer2XYZ -> SetExtentDimension(x1,x2,y1,y2,z1,z2);
121 _imageViewer2XYZ -> GetVtkImageViewer2()->SetupInteractor ( iren );
124 _imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel()->Modified();
126 _imageViewer2XYZ->GetVtkImageViewer2()->Render();
129 //RaC 04-2010 Look for the description of new changes in vtkInteractorStyleBaseView2D constructor.
132 // SetInteractorStyleImage( vtkInteractorStyleBaseView2D::New() );
135 vtkInteractorStyleBaseView2D *style2D = vtkInteractorStyleBaseView2D::New();
137 manualInteractorWindowLevel *_manualinteractorwindowlevel= new manualInteractorWindowLevel();
138 style2D->SetInteractorWindowLevel( _manualinteractorwindowlevel );
140 vtkInteractorScrollZ *_vtkInteractorScrollZ = new vtkInteractorScrollZ();
141 style2D->SetInteractorScrollZ(_vtkInteractorScrollZ);
143 SetInteractorStyleImage( style2D );
152 //-------------------------------------------------------------------
153 void wxVtk2DBaseView::SetImageToVtkViewer(vtkImageData *imageData)
155 if (_imageViewer2XYZ!=NULL)
157 _imageViewer2XYZ->GetVtkImageViewer2()->SetInput( imageData );
158 } // if _imageViewer2XYZ
162 //-------------------------------------------------------------------
163 void wxVtk2DBaseView::Configure(bool okimage)
166 int x1,x2,y1,y2,z1,z2;
167 wxVtkBaseView::Configure();
170 if (_imageViewer2XYZ==NULL)
172 _imageViewer2XYZ = new vtkImageViewer2_XYZ();
173 wxVTKRenderWindowInteractor *iren = GetWxVTKRenderWindowInteractor();
174 _imageViewer2XYZ -> GetVtkImageViewer2()->SetupInteractor ( iren );
177 //RaC 04-2010 Look for the description of new changes in vtkInteractorStyleBaseView2D constructor.
180 // SetInteractorStyleImage( vtkInteractorStyleBaseView2D::New() );
183 vtkInteractorStyleBaseView2D *style2D = vtkInteractorStyleBaseView2D::New();
185 manualInteractorWindowLevel *_manualinteractorwindowlevel= new manualInteractorWindowLevel();
186 style2D->SetInteractorWindowLevel( _manualinteractorwindowlevel );
188 vtkInteractorScrollZ *_vtkInteractorScrollZ = new vtkInteractorScrollZ();
189 style2D->SetInteractorScrollZ(_vtkInteractorScrollZ);
191 SetInteractorStyleImage( style2D );
198 vtkImageData *imageData = GetVtkBaseData()->GetMarImageData()->GetImageData();
201 imageData->UpdateInformation();
202 imageData->SetUpdateExtent( imageData->GetWholeExtent());
205 imageData->GetSpacing (spx,spy,spz);
206 imageData->GetExtent (x1,x2,y1,y2,z1,z2);
207 SetImageToVtkViewer(imageData);
208 _imageViewer2XYZ->SetExtentDimension(x1,x2,y1,y2,z1,z2);
210 /*EED Borrame, now is syncroniced in vtkBaseData for all windows
212 imageData->GetScalarRange(range);
214 _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow( (range[1]-range[0])/2 );
215 _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel( (range[1]+range[0])/4 );
217 _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow( 1000 );
218 _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel( 500 );
222 // EED 31 Janvier 2007
223 //vtkImageActor *vtkimageactor = _imageViewer2XYZ->GetVtkImageViewer2()->GetImageActor ();
224 //vtkimageactor->InterpolateOff ();
225 //vtkLookupTable * _collookup = vtkLookupTable::New( );
226 //_collookup->SetNumberOfColors( 256 );
227 //_collookup->SetTableRange( 0 , 255 );
228 //_collookup->Build( );
229 //_collookup->SetTableValue( 0 , 1 , 0 , 0 , 1 );
230 //_collookup->SetTableValue(128 , 0 , 0 , 1 , 1 );
231 //_collookup->SetTableValue(255 , 0 , 1 , 0 , 1 );
232 //_imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel ()->SetLookupTable(_collookup );
236 // SetInteractorStyleImage( vtkInteractorStyleBaseView2D::New() );
239 vtkImageViewer2 *IV2 = _imageViewer2XYZ->GetVtkImageViewer2();
240 vtkCamera *camera = IV2->GetRenderer()->GetActiveCamera();
243 //EED 21 mars 2012 FLIP problem ..PLOP..
246 camera->SetViewUp ( spx*0 , -spy*1 , spz*0 );
247 camera->SetPosition ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , -spz*10000 );
248 camera->SetFocalPoint ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*0 );
250 camera->SetViewUp ( spx*0 , spy*1 , spz*0 );
251 camera->SetPosition ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*10000 );
252 camera->SetFocalPoint ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*0 );
256 camera->SetClippingRange( 0.01 , 1000000 );
257 camera->ComputeViewPlaneNormal();
258 camera->SetParallelScale( spx*(x2-x1)/3.0 );
260 // text information over the graphic window
261 if(_vtkIinfoTextImage == NULL){
262 _vtkIinfoTextImage = new vtkInfoTextImage();
263 _vtkIinfoTextImageInteractor = new vtkInfoTextImageInteractor();
264 ((vtkInteractorStyleBaseView*)this->GetInteractorStyleBaseView())->AddInteractorStyleMaracas(_vtkIinfoTextImageInteractor);
266 _vtkIinfoTextImage->SetWxVtk2DBaseView(this);
267 _vtkIinfoTextImage->SetMarImageData( GetVtkBaseData()->GetMarImageData() );
268 _vtkIinfoTextImageInteractor->SetModelVtkInfoTextImage(_vtkIinfoTextImage);
269 _vtkIinfoTextImage->Configure();
275 //-------------------------------------------------------------------
277 int wxVtk2DBaseView::GetActualSlice() // virtual
279 return (int)(_vtkbasedata->GetZ());
282 //-------------------------------------------------------------------
283 void wxVtk2DBaseView::SetActualSlice(int slice) // Virtual
285 _vtkbasedata->SetZ(slice);
288 //-------------------------------------------------------------------
290 vtkBaseData *wxVtk2DBaseView::GetVtkBaseData()
295 //-------------------------------------------------------------------
297 void wxVtk2DBaseView::SetVtkBaseData(vtkBaseData *vtkbasedata)
299 _vtkbasedata=vtkbasedata;
302 //-------------------------------------------------------------------
303 void wxVtk2DBaseView::UpdateColorWindowLevel()
308 // vtkImageViewer2 *vtkimageviewer2 = _imageViewer2XYZ->GetVtkImageViewer2();
311 vtkImageMapToWindowLevelColors* imagemaptowindowlevel = _imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel();
312 imagemaptowindowlevel->SetWindow( _vtkbasedata->GetColorWindow() );
313 imagemaptowindowlevel->SetLevel( _vtkbasedata->GetColorLevel() );
316 // vtkimageviewer2->SetColorWindow( _vtkbasedata->GetColorWindow() );
317 // vtkimageviewer2->SetColorLevel( _vtkbasedata->GetColorLevel() );
318 _imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel()->Modified();
321 //-------------------------------------------------------------------
322 void wxVtk2DBaseView::Refresh()
324 int z = (int)(GetVtkBaseData()->GetZ());
325 _imageViewer2XYZ->SetZSlice( z );
327 UpdateColorWindowLevel();
328 wxVtkBaseView::Refresh();
331 //-------------------------------------------------------------------
332 void wxVtk2DBaseView::SetInteractorStyleImage(vtkInteractorStyleBaseView *interactorstylebaseview)
334 SetInteractorStyleBaseView(interactorstylebaseview);
336 wxVTKRenderWindowInteractor *iren = GetWxVTKRenderWindowInteractor();
337 interactorstylebaseview->SetInteractor ( iren );
338 iren->SetInteractorStyle(interactorstylebaseview);
339 interactorstylebaseview->SetwxVtkBaseView(this);
341 vtkMaracasImageViewer2Callback * cbk = vtkMaracasImageViewer2Callback::New();
342 cbk->IV = _imageViewer2XYZ->GetVtkImageViewer2();
343 interactorstylebaseview->AddObserver( vtkCommand::WindowLevelEvent, cbk );
344 interactorstylebaseview->AddObserver( vtkCommand::StartWindowLevelEvent, cbk );
345 interactorstylebaseview->AddObserver( vtkCommand::ResetWindowLevelEvent, cbk );
349 //---------------------------------------------------------------------------
350 vtkRenderer* wxVtk2DBaseView::GetRenderer() // virtual
352 return _imageViewer2XYZ->GetVtkImageViewer2()->GetRenderer();
355 //---------------------------------------------------------------------------
356 vtkRenderWindow* wxVtk2DBaseView::GetRenWin() // virtual
358 return _imageViewer2XYZ->GetVtkImageViewer2()->GetRenderWindow();
361 //-------------------------------------------------------------------
362 void wxVtk2DBaseView::GetSpacing(double spc[3]) // virtual
364 vtkImageData *imageData = GetVtkBaseData()->GetImageData();
367 imageData->GetSpacing(spc);
375 //-------------------------------------------------------------------
376 void wxVtk2DBaseView::setColorTransferFunction(vtkColorTransferFunction* colortable)
378 if(_imageViewer2XYZ!=NULL)
380 _imageViewer2XYZ->setColorTransferFunction(colortable);
385 //-------------------------------------------------------------------
386 void wxVtk2DBaseView::SetColorWindow(double level)
388 // _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow(level);
389 _vtkbasedata->SetColorWindow(level);
393 //-------------------------------------------------------------------
394 void wxVtk2DBaseView::SetColorLevel(double level)
396 // _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel(level);
397 _vtkbasedata->SetColorLevel(level);
401 //-------------------------------------------------------------------
402 int wxVtk2DBaseView::GetDirection() // virtual