]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/wxVtk2DBaseView.cxx
*** empty log message ***
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / wxVtk2DBaseView.cxx
1 #include "wxVtk2DBaseView.h"
2
3 #include "vtkInfoTextImage.h"
4 #include "vtkInteractorStyleBaseView2D.h"
5 #include "vtkInfoTextImageInteractor.h"
6
7
8 wxVtk2DBaseView::wxVtk2DBaseView(wxWindow *parent)
9 :wxVtkBaseView(parent)
10 {
11    _imageViewer2XYZ   = NULL;
12    _vtkIinfoTextImage = NULL;
13 }
14
15 //EED 5mai2009
16 //-------------------------------------------------------------------
17 wxVtk2DBaseView::~wxVtk2DBaseView()
18 {
19         if (_vtkIinfoTextImage!=NULL)
20         {
21            delete _vtkIinfoTextImage;
22         }
23
24         if (_imageViewer2XYZ!=NULL)
25         {
26            delete _imageViewer2XYZ;
27         }
28 }
29
30 //-------------------------------------------------------------------
31 void wxVtk2DBaseView::TransformCoordinate_spacing_ViewToModel(double &X,double &Y, double &Z) //        virtual
32 {
33 //EEDx5
34         double spc[3];
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();
38         if(image){
39                 image->GetSpacing(spc);
40         }else{
41                 spc[0] = 1;
42                 spc[1] = 1;
43                 spc[2] = 1;
44         }
45
46
47         X = X / spc[0];
48         Y = Y / spc[1];
49         Z = Z / spc[2];
50
51 }
52
53 //-------------------------------------------------------------------
54 void wxVtk2DBaseView::TransformCoordinate_spacing_ModelToView(double &X,double &Y, double &Z) //        virtual
55 {
56 //EEDx5
57         double spc[3];
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();
61         if(image){
62                 image->GetSpacing(spc);
63         }else{
64                 spc[0] = 1;
65                 spc[1] = 1;
66                 spc[2] = 1;
67         }
68 //
69         X=X*spc[0];
70         Y=Y*spc[1];
71         Z=Z*spc[2];
72
73 }
74
75 //-------------------------------------------------------------------
76 void wxVtk2DBaseView::ResetView()
77 {
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();
81
82         wxVTKRenderWindowInteractor *iren = GetWxVTKRenderWindowInteractor();
83         vtkImageData *imageData = GetVtkBaseData()->GetImageData();
84         if(imageData){
85                 imageData->UpdateInformation();
86                 imageData->SetUpdateExtent( imageData->GetWholeExtent());
87                 imageData->Update();
88                 _imageViewer2XYZ->GetVtkImageViewer2()->SetInput(imageData );
89                 imageData->GetSpacing (spx,spy,spz);
90                 imageData->GetExtent (x1,x2,y1,y2,z1,z2);
91         }
92
93
94         _imageViewer2XYZ -> SetExtentDimension(x1,x2,y1,y2,z1,z2);
95         _imageViewer2XYZ -> GetVtkImageViewer2()->SetupInteractor ( iren );
96
97 //EED 24oct2010
98     _imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel()->Modified();
99
100         _imageViewer2XYZ->GetVtkImageViewer2()->Render();
101
102         //////////////
103         //RaC 04-2010 Look for the description of new changes in vtkInteractorStyleBaseView2D constructor.
104         //
105         // Previous version
106         // SetInteractorStyleImage( vtkInteractorStyleBaseView2D::New() );
107         //
108         // Actual version
109         vtkInteractorStyleBaseView2D *style2D = vtkInteractorStyleBaseView2D::New();
110
111         manualInteractorWindowLevel *_manualinteractorwindowlevel= new manualInteractorWindowLevel();
112         style2D->SetInteractorWindowLevel( _manualinteractorwindowlevel );
113
114         vtkInteractorScrollZ *_vtkInteractorScrollZ = new vtkInteractorScrollZ();
115         style2D->SetInteractorScrollZ(_vtkInteractorScrollZ);
116
117         SetInteractorStyleImage( style2D );
118
119         // RaC
120         //////////////
121
122 }
123
124
125 //-------------------------------------------------------------------
126 void wxVtk2DBaseView::Configure(bool okimage)
127 {
128         double spx,spy,spz;
129         int x1,x2,y1,y2,z1,z2;
130         wxVtkBaseView::Configure();
131
132 // EED 17 Oct 2007
133         if (_imageViewer2XYZ==NULL)
134         {
135                 _imageViewer2XYZ = new vtkImageViewer2_XYZ();
136                 wxVTKRenderWindowInteractor *iren = GetWxVTKRenderWindowInteractor();
137                 _imageViewer2XYZ -> GetVtkImageViewer2()->SetupInteractor ( iren );
138
139                 //////////////
140                 //RaC 04-2010 Look for the description of new changes in vtkInteractorStyleBaseView2D constructor.
141                 //
142                 // Previous version
143                 // SetInteractorStyleImage( vtkInteractorStyleBaseView2D::New() );
144                 //
145                 // Actual version
146                 vtkInteractorStyleBaseView2D *style2D = vtkInteractorStyleBaseView2D::New();
147
148                 manualInteractorWindowLevel *_manualinteractorwindowlevel= new manualInteractorWindowLevel();
149                 style2D->SetInteractorWindowLevel( _manualinteractorwindowlevel );
150
151                 vtkInteractorScrollZ *_vtkInteractorScrollZ = new vtkInteractorScrollZ();
152                 style2D->SetInteractorScrollZ(_vtkInteractorScrollZ);
153
154                 SetInteractorStyleImage( style2D );
155
156                 // RaC
157                 //////////////
158         }
159
160
161         vtkImageData *imageData = GetVtkBaseData()->GetMarImageData()->GetImageData();
162         if (imageData!=NULL){
163
164                 imageData->UpdateInformation();
165                 imageData->SetUpdateExtent( imageData->GetWholeExtent());
166                 imageData->Update();
167                 if (okimage==true){
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);
172                         double range[2];
173                         imageData->GetScalarRange(range);
174                         if (range[1]<20000){
175                                  _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow( (range[1]-range[0])/2 );
176                                  _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel( (range[1]+range[0])/4 );
177                         } else {
178                                  _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow( 1000 );
179                                  _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel( 500 );
180                         }
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 );
192
193
194 // EED 17 Oct 2007
195 //                      SetInteractorStyleImage( vtkInteractorStyleBaseView2D::New() );
196
197
198                         vtkImageViewer2 *IV2=_imageViewer2XYZ->GetVtkImageViewer2();
199                         vtkCamera *camera = IV2->GetRenderer()->GetActiveCamera();
200
201 //EED 17Avril2009
202 /*
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         );
206 */
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         );
210
211
212                         camera->SetClippingRange( 0.01                  , 1000000 );
213                         camera->ComputeViewPlaneNormal();
214                         camera->SetParallelScale( spx*(x2-x1)/3.0 );
215
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);
221                         }
222                         _vtkIinfoTextImage->SetWxVtk2DBaseView(this);
223                         _vtkIinfoTextImage->SetMarImageData( GetVtkBaseData()->GetMarImageData() );
224                         _vtkIinfoTextImageInteractor->SetModelVtkInfoTextImage(_vtkIinfoTextImage);
225                         _vtkIinfoTextImage->Configure();
226
227                 } // okimage
228         } // imageData
229 }
230
231 //-------------------------------------------------------------------
232
233 int     wxVtk2DBaseView::GetActualSlice()  // virtual
234 {
235    return (int)(_vtkbasedata->GetZ());
236 }
237
238 //-------------------------------------------------------------------
239 void wxVtk2DBaseView::SetActualSlice(int slice)  // Virtual
240 {
241    _vtkbasedata->SetZ(slice);
242 }
243
244 //-------------------------------------------------------------------
245
246 vtkBaseData *wxVtk2DBaseView::GetVtkBaseData()
247 {
248    return _vtkbasedata;
249 }
250
251 //-------------------------------------------------------------------
252
253 void wxVtk2DBaseView::SetVtkBaseData(vtkBaseData *vtkbasedata)
254 {
255    _vtkbasedata=vtkbasedata;
256 }
257
258 //-------------------------------------------------------------------
259
260 void wxVtk2DBaseView::Refresh()
261 {
262    int z = (int)(GetVtkBaseData()->GetZ());
263   _imageViewer2XYZ->SetZSlice( z );
264
265 //EED 24oct2010
266   _imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel()->Modified();
267
268    wxVtkBaseView::Refresh();
269 }
270
271 //-------------------------------------------------------------------
272
273 void wxVtk2DBaseView::SetInteractorStyleImage(vtkInteractorStyleBaseView *interactorstylebaseview)
274 {
275         SetInteractorStyleBaseView(interactorstylebaseview);
276
277         wxVTKRenderWindowInteractor *iren = GetWxVTKRenderWindowInteractor();
278         interactorstylebaseview->SetInteractor ( iren );
279         iren->SetInteractorStyle(interactorstylebaseview);
280         interactorstylebaseview->SetwxVtkBaseView(this);
281
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 );
287         cbk->Delete();
288 }
289
290 //---------------------------------------------------------------------------
291 vtkRenderer* wxVtk2DBaseView::GetRenderer()     // virtual
292 {
293    return _imageViewer2XYZ->GetVtkImageViewer2()->GetRenderer();
294 }
295 //---------------------------------------------------------------------------
296 vtkRenderWindow* wxVtk2DBaseView::GetRenWin()           // virtual
297 {
298    return _imageViewer2XYZ->GetVtkImageViewer2()->GetRenderWindow();
299 }
300
301 //-------------------------------------------------------------------
302
303 void wxVtk2DBaseView::GetSpacing(double spc[3])  // virtual
304 {
305    vtkImageData *imageData      = GetVtkBaseData()->GetImageData();
306    if(imageData){
307         imageData->GetSpacing(spc);
308    }else{
309          spc[0] = 0;
310          spc[1] = 0;
311          spc[2] = 0;
312    }
313 }
314
315 void wxVtk2DBaseView::setColorTransferFunction(vtkColorTransferFunction* colortable){
316         if(_imageViewer2XYZ!=NULL){
317                 _imageViewer2XYZ->setColorTransferFunction(colortable);
318                 this->Refresh();
319         }
320 }
321
322 void wxVtk2DBaseView::setWindowLevel(double level){
323 //      _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow(level);
324
325         vtkImageMapToWindowLevelColors* imagemaptowindowlevel = _imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel();
326         imagemaptowindowlevel->SetWindow(level);
327         this->Refresh();
328 }
329
330 void wxVtk2DBaseView::setColorLevel(double level){
331 //      _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel(level);
332         vtkImageMapToWindowLevelColors* imagemaptowindowlevel = _imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel();
333         imagemaptowindowlevel->SetLevel(level);
334         this->Refresh();
335 }