]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/wxVtk2DBaseView.cxx
e703115d09b08fa97a262b39cfe6158d7f74a1cb
[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         this->_imageViewer2XYZ->GetVtkImageViewer2()->GetInput()->GetSpacing(spc);
37
38         X = X / spc[0];
39         Y = Y / spc[1];
40         Z = Z / spc[2];
41
42 }
43
44 //-------------------------------------------------------------------
45 void wxVtk2DBaseView::TransformCoordinate_spacing_ModelToView(double &X,double &Y, double &Z) //        virtual 
46 {
47 //EEDx5
48         double spc[3];
49 //      GetVtkBaseData()->GetImageData()->GetSpacing(spc);
50         this->_imageViewer2XYZ->GetVtkImageViewer2()->GetInput()->GetSpacing(spc);
51
52         X=X*spc[0];
53         Y=Y*spc[1];
54         Z=Z*spc[2];
55
56 }
57
58 //-------------------------------------------------------------------
59 void wxVtk2DBaseView::ResetView()
60 {
61         double spx,spy,spz;
62         int x1,x2,y1,y2,z1,z2;
63         wxVtkBaseView::Configure();
64         
65         wxVTKRenderWindowInteractor *iren = GetWxVTKRenderWindowInteractor();
66         vtkImageData *imageData = GetVtkBaseData()->GetImageData();
67         imageData->UpdateInformation();
68         imageData->SetUpdateExtent( imageData->GetWholeExtent());
69         imageData->Update();
70
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 );
76
77         _imageViewer2XYZ->GetVtkImageViewer2()->Render();
78         
79         //////////////
80         //RaC 04-2010 Look for the description of new changes in vtkInteractorStyleBaseView2D constructor.
81         //
82         // Previous version
83         // SetInteractorStyleImage( vtkInteractorStyleBaseView2D::New() );
84         //
85         // Actual version
86         vtkInteractorStyleBaseView2D *style2D = vtkInteractorStyleBaseView2D::New();
87
88         manualInteractorWindowLevel *_manualinteractorwindowlevel= new manualInteractorWindowLevel();
89         style2D->SetInteractorWindowLevel( _manualinteractorwindowlevel );
90         
91         vtkInteractorScrollZ *_vtkInteractorScrollZ = new vtkInteractorScrollZ();
92         style2D->SetInteractorScrollZ(_vtkInteractorScrollZ);
93
94         SetInteractorStyleImage( style2D );
95
96         // RaC
97         //////////////
98         
99 }
100
101
102 //-------------------------------------------------------------------
103 void wxVtk2DBaseView::Configure(bool okimage)
104 {
105         double spx,spy,spz;
106         int x1,x2,y1,y2,z1,z2;
107         wxVtkBaseView::Configure();
108
109 // EED 17 Oct 2007
110         if (_imageViewer2XYZ==NULL)
111         {
112                 _imageViewer2XYZ = new vtkImageViewer2_XYZ();
113                 wxVTKRenderWindowInteractor *iren = GetWxVTKRenderWindowInteractor();
114                 _imageViewer2XYZ -> GetVtkImageViewer2()->SetupInteractor ( iren );
115                 
116                 //////////////
117                 //RaC 04-2010 Look for the description of new changes in vtkInteractorStyleBaseView2D constructor.
118                 //
119                 // Previous version
120                 // SetInteractorStyleImage( vtkInteractorStyleBaseView2D::New() );
121                 //
122                 // Actual version
123                 vtkInteractorStyleBaseView2D *style2D = vtkInteractorStyleBaseView2D::New();
124
125                 manualInteractorWindowLevel *_manualinteractorwindowlevel= new manualInteractorWindowLevel();
126                 style2D->SetInteractorWindowLevel( _manualinteractorwindowlevel );
127                 
128                 vtkInteractorScrollZ *_vtkInteractorScrollZ = new vtkInteractorScrollZ();
129                 style2D->SetInteractorScrollZ(_vtkInteractorScrollZ);
130
131                 SetInteractorStyleImage( style2D );
132
133                 // RaC
134                 //////////////
135
136         }
137
138
139         vtkImageData *imageData = GetVtkBaseData()->GetMarImageData()->GetImageData();
140         if (imageData!=NULL){
141                 imageData->UpdateInformation();
142                 imageData->SetUpdateExtent( imageData->GetWholeExtent());
143                 imageData->Update();
144                 if (okimage==true){
145                         imageData->GetSpacing (spx,spy,spz);
146                         imageData->GetExtent (x1,x2,y1,y2,z1,z2);
147
148
149                         _imageViewer2XYZ->GetVtkImageViewer2()->SetInput(imageData );
150                         _imageViewer2XYZ->SetExtentDimension(x1,x2,y1,y2,z1,z2);
151                         double range[2];
152                           imageData->GetScalarRange(range);
153                           if (range[1]<20000){
154                                  _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow( (range[1]-range[0])/2 );
155                                  _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel( (range[1]+range[0])/4 );
156                           } else {
157                                  _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow( 1000 );
158                                  _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel( 500 );
159                           }
160 // EED 31 Janvier 2007
161 //vtkImageActor *vtkimageactor = _imageViewer2XYZ->GetVtkImageViewer2()->GetImageActor ();
162 //vtkimageactor->InterpolateOff ();
163 //vtkLookupTable * _collookup = vtkLookupTable::New( );
164 //_collookup->SetNumberOfColors( 256 );
165 //_collookup->SetTableRange( 0 , 255 );
166 //_collookup->Build( );
167 //_collookup->SetTableValue( 0  , 1 , 0 , 0 , 1 );
168 //_collookup->SetTableValue(128 , 0 , 0 , 1 , 1 );
169 //_collookup->SetTableValue(255 , 0 , 1 , 0 , 1 );
170 //_imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel ()->SetLookupTable(_collookup );
171
172
173 // EED 17 Oct 2007
174 //                      SetInteractorStyleImage( vtkInteractorStyleBaseView2D::New() );
175
176
177                         vtkImageViewer2 *IV2=_imageViewer2XYZ->GetVtkImageViewer2();
178                         vtkCamera *camera = IV2->GetRenderer()->GetActiveCamera();
179
180 //EED 17Avril2009       
181 /*                      
182                         camera->SetViewUp               ( spx*0                 , -spy*1                        , spz*0         );
183                         camera->SetPosition             ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , -spz*10000    ); 
184                         camera->SetFocalPoint   ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*0         ); 
185 */ 
186                         camera->SetViewUp               ( spx*0                 , spy*1                 , spz*0         );
187                         camera->SetPosition             ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*10000     ); 
188                         camera->SetFocalPoint   ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*0         ); 
189                         
190                         
191                         camera->SetClippingRange( 0.01                  , 1000000 );
192                         camera->ComputeViewPlaneNormal();
193                         camera->SetParallelScale( spx*(x2-x1)/3.0 );
194                         
195                         // text information over the graphic window
196                         if(_vtkIinfoTextImage == NULL){
197                                 _vtkIinfoTextImage              = new vtkInfoTextImage();
198                                 _vtkIinfoTextImageInteractor    = new vtkInfoTextImageInteractor();                             
199                                 ((vtkInteractorStyleBaseView*)this->GetInteractorStyleBaseView())->AddInteractorStyleMaracas(_vtkIinfoTextImageInteractor);
200                         }
201                         _vtkIinfoTextImage->SetWxVtk2DBaseView(this);
202                         _vtkIinfoTextImage->SetMarImageData( GetVtkBaseData()->GetMarImageData() );
203                         _vtkIinfoTextImageInteractor->SetModelVtkInfoTextImage(_vtkIinfoTextImage);                             
204                         _vtkIinfoTextImage->Configure();
205                         
206                 } // okimage
207         } // imageData
208
209 }
210
211 //-------------------------------------------------------------------
212
213 int     wxVtk2DBaseView::GetActualSlice()  // virtual 
214 {
215    return (int)(_vtkbasedata->GetZ());
216 }
217
218 //-------------------------------------------------------------------
219 void wxVtk2DBaseView::SetActualSlice(int slice)  // Virtual
220 {
221    _vtkbasedata->SetZ(slice);
222 }
223
224 //-------------------------------------------------------------------
225
226 vtkBaseData *wxVtk2DBaseView::GetVtkBaseData()
227 {
228    return _vtkbasedata;
229 }
230
231 //-------------------------------------------------------------------
232
233 void wxVtk2DBaseView::SetVtkBaseData(vtkBaseData *vtkbasedata)
234 {
235    _vtkbasedata=vtkbasedata;
236 }
237
238 //-------------------------------------------------------------------
239
240 void wxVtk2DBaseView::Refresh()
241 {
242    int z = (int)(GetVtkBaseData()->GetZ());
243   _imageViewer2XYZ->SetZSlice( z ); 
244
245    wxVtkBaseView::Refresh();
246 }
247
248 //-------------------------------------------------------------------
249
250 void wxVtk2DBaseView::SetInteractorStyleImage(vtkInteractorStyleBaseView *interactorstylebaseview)
251 {
252         SetInteractorStyleBaseView(interactorstylebaseview);
253
254         wxVTKRenderWindowInteractor *iren = GetWxVTKRenderWindowInteractor();
255         interactorstylebaseview->SetInteractor ( iren );
256         iren->SetInteractorStyle(interactorstylebaseview);
257         interactorstylebaseview->SetwxVtkBaseView(this);        
258
259         vtkMaracasImageViewer2Callback * cbk = vtkMaracasImageViewer2Callback::New();
260         cbk->IV = _imageViewer2XYZ->GetVtkImageViewer2();
261         interactorstylebaseview->AddObserver( vtkCommand::WindowLevelEvent, cbk );
262         interactorstylebaseview->AddObserver( vtkCommand::StartWindowLevelEvent, cbk );
263         interactorstylebaseview->AddObserver( vtkCommand::ResetWindowLevelEvent, cbk );
264         cbk->Delete();
265 }
266
267 //---------------------------------------------------------------------------
268 vtkRenderer* wxVtk2DBaseView::GetRenderer()     // virtual 
269 {
270    return _imageViewer2XYZ->GetVtkImageViewer2()->GetRenderer();
271 }
272 //---------------------------------------------------------------------------
273 vtkRenderWindow* wxVtk2DBaseView::GetRenWin()           // virtual
274 {
275    return _imageViewer2XYZ->GetVtkImageViewer2()->GetRenderWindow();
276 }
277
278 //-------------------------------------------------------------------
279
280 void wxVtk2DBaseView::GetSpacing(double spc[3])  // virtual
281 {
282    vtkImageData *imageData      = GetVtkBaseData()->GetImageData();
283    imageData->GetSpacing(spc);
284 }
285
286 void wxVtk2DBaseView::setColorTransferFunction(vtkColorTransferFunction* colortable){
287         if(_imageViewer2XYZ!=NULL){
288                 _imageViewer2XYZ->setColorTransferFunction(colortable);
289                 this->Refresh();
290         }
291 }
292
293 void wxVtk2DBaseView::setWindowLevel(double level){
294 //      _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow(level);  
295
296         vtkImageMapToWindowLevelColors* imagemaptowindowlevel = _imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel();
297         imagemaptowindowlevel->SetWindow(level);
298         this->Refresh();
299 }
300
301 void wxVtk2DBaseView::setColorLevel(double level){
302 //      _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel(level);
303         vtkImageMapToWindowLevelColors* imagemaptowindowlevel = _imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel();
304         imagemaptowindowlevel->SetLevel(level);
305         this->Refresh();
306 }