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 this->_imageViewer2XYZ->GetVtkImageViewer2()->GetInput()->GetSpacing(spc);
44 //-------------------------------------------------------------------
45 void wxVtk2DBaseView::TransformCoordinate_spacing_ModelToView(double &X,double &Y, double &Z) // virtual
49 // GetVtkBaseData()->GetImageData()->GetSpacing(spc);
50 this->_imageViewer2XYZ->GetVtkImageViewer2()->GetInput()->GetSpacing(spc);
58 //-------------------------------------------------------------------
59 void wxVtk2DBaseView::ResetView()
62 int x1,x2,y1,y2,z1,z2;
63 wxVtkBaseView::Configure();
65 wxVTKRenderWindowInteractor *iren = GetWxVTKRenderWindowInteractor();
66 vtkImageData *imageData = GetVtkBaseData()->GetImageData();
67 imageData->UpdateInformation();
68 imageData->SetUpdateExtent( imageData->GetWholeExtent());
71 _imageViewer2XYZ->GetVtkImageViewer2()->SetInput(imageData );
72 imageData->GetSpacing (spx,spy,spz);
73 imageData->GetExtent (x1,x2,y1,y2,z1,z2);
74 _imageViewer2XYZ -> SetExtentDimension(x1,x2,y1,y2,z1,z2);
75 _imageViewer2XYZ -> GetVtkImageViewer2()->SetupInteractor ( iren );
77 _imageViewer2XYZ->GetVtkImageViewer2()->Render();
80 //RaC 04-2010 Look for the description of new changes in vtkInteractorStyleBaseView2D constructor.
83 // SetInteractorStyleImage( vtkInteractorStyleBaseView2D::New() );
86 vtkInteractorStyleBaseView2D *style2D = vtkInteractorStyleBaseView2D::New();
88 manualInteractorWindowLevel *_manualinteractorwindowlevel= new manualInteractorWindowLevel();
89 style2D->SetInteractorWindowLevel( _manualinteractorwindowlevel );
91 vtkInteractorScrollZ *_vtkInteractorScrollZ = new vtkInteractorScrollZ();
92 style2D->SetInteractorScrollZ(_vtkInteractorScrollZ);
94 SetInteractorStyleImage( style2D );
102 //-------------------------------------------------------------------
103 void wxVtk2DBaseView::Configure(bool okimage)
106 int x1,x2,y1,y2,z1,z2;
107 wxVtkBaseView::Configure();
110 if (_imageViewer2XYZ==NULL)
112 _imageViewer2XYZ = new vtkImageViewer2_XYZ();
113 wxVTKRenderWindowInteractor *iren = GetWxVTKRenderWindowInteractor();
114 _imageViewer2XYZ -> GetVtkImageViewer2()->SetupInteractor ( iren );
117 //RaC 04-2010 Look for the description of new changes in vtkInteractorStyleBaseView2D constructor.
120 // SetInteractorStyleImage( vtkInteractorStyleBaseView2D::New() );
123 vtkInteractorStyleBaseView2D *style2D = vtkInteractorStyleBaseView2D::New();
125 manualInteractorWindowLevel *_manualinteractorwindowlevel= new manualInteractorWindowLevel();
126 style2D->SetInteractorWindowLevel( _manualinteractorwindowlevel );
128 vtkInteractorScrollZ *_vtkInteractorScrollZ = new vtkInteractorScrollZ();
129 style2D->SetInteractorScrollZ(_vtkInteractorScrollZ);
131 SetInteractorStyleImage( style2D );
138 vtkImageData *imageData = GetVtkBaseData()->GetMarImageData()->GetImageData();
139 if (imageData!=NULL){
140 imageData->UpdateInformation();
141 imageData->SetUpdateExtent( imageData->GetWholeExtent());
144 imageData->GetSpacing (spx,spy,spz);
145 imageData->GetExtent (x1,x2,y1,y2,z1,z2);
146 _imageViewer2XYZ->GetVtkImageViewer2()->SetInput(imageData );
147 _imageViewer2XYZ->SetExtentDimension(x1,x2,y1,y2,z1,z2);
149 imageData->GetScalarRange(range);
151 _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow( (range[1]-range[0])/2 );
152 _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel( (range[1]+range[0])/4 );
154 _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow( 1000 );
155 _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel( 500 );
157 // EED 31 Janvier 2007
158 //vtkImageActor *vtkimageactor = _imageViewer2XYZ->GetVtkImageViewer2()->GetImageActor ();
159 //vtkimageactor->InterpolateOff ();
160 //vtkLookupTable * _collookup = vtkLookupTable::New( );
161 //_collookup->SetNumberOfColors( 256 );
162 //_collookup->SetTableRange( 0 , 255 );
163 //_collookup->Build( );
164 //_collookup->SetTableValue( 0 , 1 , 0 , 0 , 1 );
165 //_collookup->SetTableValue(128 , 0 , 0 , 1 , 1 );
166 //_collookup->SetTableValue(255 , 0 , 1 , 0 , 1 );
167 //_imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel ()->SetLookupTable(_collookup );
171 // SetInteractorStyleImage( vtkInteractorStyleBaseView2D::New() );
174 vtkImageViewer2 *IV2=_imageViewer2XYZ->GetVtkImageViewer2();
175 vtkCamera *camera = IV2->GetRenderer()->GetActiveCamera();
179 camera->SetViewUp ( spx*0 , -spy*1 , spz*0 );
180 camera->SetPosition ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , -spz*10000 );
181 camera->SetFocalPoint ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*0 );
183 camera->SetViewUp ( spx*0 , spy*1 , spz*0 );
184 camera->SetPosition ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*10000 );
185 camera->SetFocalPoint ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*0 );
188 camera->SetClippingRange( 0.01 , 1000000 );
189 camera->ComputeViewPlaneNormal();
190 camera->SetParallelScale( spx*(x2-x1)/3.0 );
192 // text information over the graphic window
193 if(_vtkIinfoTextImage == NULL){
194 _vtkIinfoTextImage = new vtkInfoTextImage();
195 _vtkIinfoTextImageInteractor = new vtkInfoTextImageInteractor();
196 ((vtkInteractorStyleBaseView*)this->GetInteractorStyleBaseView())->AddInteractorStyleMaracas(_vtkIinfoTextImageInteractor);
198 _vtkIinfoTextImage->SetWxVtk2DBaseView(this);
199 _vtkIinfoTextImage->SetMarImageData( GetVtkBaseData()->GetMarImageData() );
200 _vtkIinfoTextImageInteractor->SetModelVtkInfoTextImage(_vtkIinfoTextImage);
201 _vtkIinfoTextImage->Configure();
207 //-------------------------------------------------------------------
209 int wxVtk2DBaseView::GetActualSlice() // virtual
211 return (int)(_vtkbasedata->GetZ());
214 //-------------------------------------------------------------------
215 void wxVtk2DBaseView::SetActualSlice(int slice) // Virtual
217 _vtkbasedata->SetZ(slice);
220 //-------------------------------------------------------------------
222 vtkBaseData *wxVtk2DBaseView::GetVtkBaseData()
227 //-------------------------------------------------------------------
229 void wxVtk2DBaseView::SetVtkBaseData(vtkBaseData *vtkbasedata)
231 _vtkbasedata=vtkbasedata;
234 //-------------------------------------------------------------------
236 void wxVtk2DBaseView::Refresh()
238 int z = (int)(GetVtkBaseData()->GetZ());
239 _imageViewer2XYZ->SetZSlice( z );
241 wxVtkBaseView::Refresh();
244 //-------------------------------------------------------------------
246 void wxVtk2DBaseView::SetInteractorStyleImage(vtkInteractorStyleBaseView *interactorstylebaseview)
248 SetInteractorStyleBaseView(interactorstylebaseview);
250 wxVTKRenderWindowInteractor *iren = GetWxVTKRenderWindowInteractor();
251 interactorstylebaseview->SetInteractor ( iren );
252 iren->SetInteractorStyle(interactorstylebaseview);
253 interactorstylebaseview->SetwxVtkBaseView(this);
255 vtkMaracasImageViewer2Callback * cbk = vtkMaracasImageViewer2Callback::New();
256 cbk->IV = _imageViewer2XYZ->GetVtkImageViewer2();
257 interactorstylebaseview->AddObserver( vtkCommand::WindowLevelEvent, cbk );
258 interactorstylebaseview->AddObserver( vtkCommand::StartWindowLevelEvent, cbk );
259 interactorstylebaseview->AddObserver( vtkCommand::ResetWindowLevelEvent, cbk );
263 //---------------------------------------------------------------------------
264 vtkRenderer* wxVtk2DBaseView::GetRenderer() // virtual
266 return _imageViewer2XYZ->GetVtkImageViewer2()->GetRenderer();
268 //---------------------------------------------------------------------------
269 vtkRenderWindow* wxVtk2DBaseView::GetRenWin() // virtual
271 return _imageViewer2XYZ->GetVtkImageViewer2()->GetRenderWindow();
274 //-------------------------------------------------------------------
276 void wxVtk2DBaseView::GetSpacing(double spc[3]) // virtual
278 vtkImageData *imageData = GetVtkBaseData()->GetImageData();
279 imageData->GetSpacing(spc);
282 void wxVtk2DBaseView::setColorTransferFunction(vtkColorTransferFunction* colortable){
283 if(_imageViewer2XYZ!=NULL){
284 _imageViewer2XYZ->setColorTransferFunction(colortable);
289 void wxVtk2DBaseView::setWindowLevel(double level){
290 // _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow(level);
292 vtkImageMapToWindowLevelColors* imagemaptowindowlevel = _imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel();
293 imagemaptowindowlevel->SetWindow(level);
297 void wxVtk2DBaseView::setColorLevel(double level){
298 // _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel(level);
299 vtkImageMapToWindowLevelColors* imagemaptowindowlevel = _imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel();
300 imagemaptowindowlevel->SetLevel(level);