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 double spx = 0,spy = 0,spz = 0;
79 int x1 = 1,x2 = 1,y1 = 1,y2 = 1,z1 = 1,z2 = 1;
80 wxVtkBaseView::Configure();
82 wxVTKRenderWindowInteractor *iren = GetWxVTKRenderWindowInteractor();
83 vtkImageData *imageData = GetVtkBaseData()->GetImageData();
85 imageData->UpdateInformation();
86 imageData->SetUpdateExtent( imageData->GetWholeExtent());
88 _imageViewer2XYZ->GetVtkImageViewer2()->SetInput(imageData );
89 imageData->GetSpacing (spx,spy,spz);
90 imageData->GetExtent (x1,x2,y1,y2,z1,z2);
94 _imageViewer2XYZ -> SetExtentDimension(x1,x2,y1,y2,z1,z2);
95 _imageViewer2XYZ -> GetVtkImageViewer2()->SetupInteractor ( iren );
98 _imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel()->Modified();
100 _imageViewer2XYZ->GetVtkImageViewer2()->Render();
103 //RaC 04-2010 Look for the description of new changes in vtkInteractorStyleBaseView2D constructor.
106 // SetInteractorStyleImage( vtkInteractorStyleBaseView2D::New() );
109 vtkInteractorStyleBaseView2D *style2D = vtkInteractorStyleBaseView2D::New();
111 manualInteractorWindowLevel *_manualinteractorwindowlevel= new manualInteractorWindowLevel();
112 style2D->SetInteractorWindowLevel( _manualinteractorwindowlevel );
114 vtkInteractorScrollZ *_vtkInteractorScrollZ = new vtkInteractorScrollZ();
115 style2D->SetInteractorScrollZ(_vtkInteractorScrollZ);
117 SetInteractorStyleImage( style2D );
125 //-------------------------------------------------------------------
126 void wxVtk2DBaseView::Configure(bool okimage)
129 int x1,x2,y1,y2,z1,z2;
130 wxVtkBaseView::Configure();
133 if (_imageViewer2XYZ==NULL)
135 _imageViewer2XYZ = new vtkImageViewer2_XYZ();
136 wxVTKRenderWindowInteractor *iren = GetWxVTKRenderWindowInteractor();
137 _imageViewer2XYZ -> GetVtkImageViewer2()->SetupInteractor ( iren );
140 //RaC 04-2010 Look for the description of new changes in vtkInteractorStyleBaseView2D constructor.
143 // SetInteractorStyleImage( vtkInteractorStyleBaseView2D::New() );
146 vtkInteractorStyleBaseView2D *style2D = vtkInteractorStyleBaseView2D::New();
148 manualInteractorWindowLevel *_manualinteractorwindowlevel= new manualInteractorWindowLevel();
149 style2D->SetInteractorWindowLevel( _manualinteractorwindowlevel );
151 vtkInteractorScrollZ *_vtkInteractorScrollZ = new vtkInteractorScrollZ();
152 style2D->SetInteractorScrollZ(_vtkInteractorScrollZ);
154 SetInteractorStyleImage( style2D );
161 vtkImageData *imageData = GetVtkBaseData()->GetMarImageData()->GetImageData();
162 if (imageData!=NULL){
164 imageData->UpdateInformation();
165 imageData->SetUpdateExtent( imageData->GetWholeExtent());
168 imageData->GetSpacing (spx,spy,spz);
169 imageData->GetExtent (x1,x2,y1,y2,z1,z2);
170 _imageViewer2XYZ->GetVtkImageViewer2()->SetInput(imageData );
171 _imageViewer2XYZ->SetExtentDimension(x1,x2,y1,y2,z1,z2);
173 imageData->GetScalarRange(range);
175 _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow( (range[1]-range[0])/2 );
176 _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel( (range[1]+range[0])/4 );
178 _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow( 1000 );
179 _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel( 500 );
181 // EED 31 Janvier 2007
182 //vtkImageActor *vtkimageactor = _imageViewer2XYZ->GetVtkImageViewer2()->GetImageActor ();
183 //vtkimageactor->InterpolateOff ();
184 //vtkLookupTable * _collookup = vtkLookupTable::New( );
185 //_collookup->SetNumberOfColors( 256 );
186 //_collookup->SetTableRange( 0 , 255 );
187 //_collookup->Build( );
188 //_collookup->SetTableValue( 0 , 1 , 0 , 0 , 1 );
189 //_collookup->SetTableValue(128 , 0 , 0 , 1 , 1 );
190 //_collookup->SetTableValue(255 , 0 , 1 , 0 , 1 );
191 //_imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel ()->SetLookupTable(_collookup );
195 // SetInteractorStyleImage( vtkInteractorStyleBaseView2D::New() );
198 vtkImageViewer2 *IV2=_imageViewer2XYZ->GetVtkImageViewer2();
199 vtkCamera *camera = IV2->GetRenderer()->GetActiveCamera();
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 );
207 camera->SetViewUp ( spx*0 , spy*1 , spz*0 );
208 camera->SetPosition ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*10000 );
209 camera->SetFocalPoint ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*0 );
212 camera->SetClippingRange( 0.01 , 1000000 );
213 camera->ComputeViewPlaneNormal();
214 camera->SetParallelScale( spx*(x2-x1)/3.0 );
216 // text information over the graphic window
217 if(_vtkIinfoTextImage == NULL){
218 _vtkIinfoTextImage = new vtkInfoTextImage();
219 _vtkIinfoTextImageInteractor = new vtkInfoTextImageInteractor();
220 ((vtkInteractorStyleBaseView*)this->GetInteractorStyleBaseView())->AddInteractorStyleMaracas(_vtkIinfoTextImageInteractor);
222 _vtkIinfoTextImage->SetWxVtk2DBaseView(this);
223 _vtkIinfoTextImage->SetMarImageData( GetVtkBaseData()->GetMarImageData() );
224 _vtkIinfoTextImageInteractor->SetModelVtkInfoTextImage(_vtkIinfoTextImage);
225 _vtkIinfoTextImage->Configure();
231 //-------------------------------------------------------------------
233 int wxVtk2DBaseView::GetActualSlice() // virtual
235 return (int)(_vtkbasedata->GetZ());
238 //-------------------------------------------------------------------
239 void wxVtk2DBaseView::SetActualSlice(int slice) // Virtual
241 _vtkbasedata->SetZ(slice);
244 //-------------------------------------------------------------------
246 vtkBaseData *wxVtk2DBaseView::GetVtkBaseData()
251 //-------------------------------------------------------------------
253 void wxVtk2DBaseView::SetVtkBaseData(vtkBaseData *vtkbasedata)
255 _vtkbasedata=vtkbasedata;
258 //-------------------------------------------------------------------
260 void wxVtk2DBaseView::Refresh()
262 int z = (int)(GetVtkBaseData()->GetZ());
263 _imageViewer2XYZ->SetZSlice( z );
266 _imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel()->Modified();
268 wxVtkBaseView::Refresh();
271 //-------------------------------------------------------------------
273 void wxVtk2DBaseView::SetInteractorStyleImage(vtkInteractorStyleBaseView *interactorstylebaseview)
275 SetInteractorStyleBaseView(interactorstylebaseview);
277 wxVTKRenderWindowInteractor *iren = GetWxVTKRenderWindowInteractor();
278 interactorstylebaseview->SetInteractor ( iren );
279 iren->SetInteractorStyle(interactorstylebaseview);
280 interactorstylebaseview->SetwxVtkBaseView(this);
282 vtkMaracasImageViewer2Callback * cbk = vtkMaracasImageViewer2Callback::New();
283 cbk->IV = _imageViewer2XYZ->GetVtkImageViewer2();
284 interactorstylebaseview->AddObserver( vtkCommand::WindowLevelEvent, cbk );
285 interactorstylebaseview->AddObserver( vtkCommand::StartWindowLevelEvent, cbk );
286 interactorstylebaseview->AddObserver( vtkCommand::ResetWindowLevelEvent, cbk );
290 //---------------------------------------------------------------------------
291 vtkRenderer* wxVtk2DBaseView::GetRenderer() // virtual
293 return _imageViewer2XYZ->GetVtkImageViewer2()->GetRenderer();
295 //---------------------------------------------------------------------------
296 vtkRenderWindow* wxVtk2DBaseView::GetRenWin() // virtual
298 return _imageViewer2XYZ->GetVtkImageViewer2()->GetRenderWindow();
301 //-------------------------------------------------------------------
302 void wxVtk2DBaseView::GetSpacing(double spc[3]) // virtual
304 vtkImageData *imageData = GetVtkBaseData()->GetImageData();
306 imageData->GetSpacing(spc);
314 //-------------------------------------------------------------------
315 void wxVtk2DBaseView::setColorTransferFunction(vtkColorTransferFunction* colortable)
317 if(_imageViewer2XYZ!=NULL){
318 _imageViewer2XYZ->setColorTransferFunction(colortable);
323 //-------------------------------------------------------------------
324 void wxVtk2DBaseView::setWindowLevel(double level)
326 // _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow(level);
328 vtkImageMapToWindowLevelColors* imagemaptowindowlevel = _imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel();
329 imagemaptowindowlevel->SetWindow(level);
333 //-------------------------------------------------------------------
334 void wxVtk2DBaseView::setColorLevel(double level)
336 // _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel(level);
337 vtkImageMapToWindowLevelColors* imagemaptowindowlevel = _imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel();
338 imagemaptowindowlevel->SetLevel(level);
342 //-------------------------------------------------------------------
343 int wxVtk2DBaseView::GetDirection() // virtual