]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/wxVtk2DBaseView.cxx
avoid warnings / fix typo / reindent
[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         vtkImageData *imageData = GetVtkBaseData()->GetMarImageData()->GetImageData();
139         if (imageData!=NULL){
140                 imageData->UpdateInformation();
141                 imageData->SetUpdateExtent( imageData->GetWholeExtent());
142                 imageData->Update();
143                 if (okimage==true){
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);
148                         double range[2];
149                         imageData->GetScalarRange(range);
150                         if (range[1]<20000){
151                                  _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow( (range[1]-range[0])/2 );
152                                  _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel( (range[1]+range[0])/4 );
153                         } else {
154                                  _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow( 1000 );
155                                  _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel( 500 );
156                         }
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 );
168
169
170 // EED 17 Oct 2007
171 //                      SetInteractorStyleImage( vtkInteractorStyleBaseView2D::New() );
172
173
174                         vtkImageViewer2 *IV2=_imageViewer2XYZ->GetVtkImageViewer2();
175                         vtkCamera *camera = IV2->GetRenderer()->GetActiveCamera();
176
177 //EED 17Avril2009       
178 /*                      
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         ); 
182 */ 
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         ); 
186                         
187                         
188                         camera->SetClippingRange( 0.01                  , 1000000 );
189                         camera->ComputeViewPlaneNormal();
190                         camera->SetParallelScale( spx*(x2-x1)/3.0 );
191                         
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);
197                         }
198                         _vtkIinfoTextImage->SetWxVtk2DBaseView(this);
199                         _vtkIinfoTextImage->SetMarImageData( GetVtkBaseData()->GetMarImageData() );
200                         _vtkIinfoTextImageInteractor->SetModelVtkInfoTextImage(_vtkIinfoTextImage);                             
201                         _vtkIinfoTextImage->Configure();
202                         
203                 } // okimage
204         } // imageData
205 }
206
207 //-------------------------------------------------------------------
208
209 int     wxVtk2DBaseView::GetActualSlice()  // virtual 
210 {
211    return (int)(_vtkbasedata->GetZ());
212 }
213
214 //-------------------------------------------------------------------
215 void wxVtk2DBaseView::SetActualSlice(int slice)  // Virtual
216 {
217    _vtkbasedata->SetZ(slice);
218 }
219
220 //-------------------------------------------------------------------
221
222 vtkBaseData *wxVtk2DBaseView::GetVtkBaseData()
223 {
224    return _vtkbasedata;
225 }
226
227 //-------------------------------------------------------------------
228
229 void wxVtk2DBaseView::SetVtkBaseData(vtkBaseData *vtkbasedata)
230 {
231    _vtkbasedata=vtkbasedata;
232 }
233
234 //-------------------------------------------------------------------
235
236 void wxVtk2DBaseView::Refresh()
237 {
238    int z = (int)(GetVtkBaseData()->GetZ());
239   _imageViewer2XYZ->SetZSlice( z ); 
240
241    wxVtkBaseView::Refresh();
242 }
243
244 //-------------------------------------------------------------------
245
246 void wxVtk2DBaseView::SetInteractorStyleImage(vtkInteractorStyleBaseView *interactorstylebaseview)
247 {
248         SetInteractorStyleBaseView(interactorstylebaseview);
249
250         wxVTKRenderWindowInteractor *iren = GetWxVTKRenderWindowInteractor();
251         interactorstylebaseview->SetInteractor ( iren );
252         iren->SetInteractorStyle(interactorstylebaseview);
253         interactorstylebaseview->SetwxVtkBaseView(this);        
254
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 );
260         cbk->Delete();
261 }
262
263 //---------------------------------------------------------------------------
264 vtkRenderer* wxVtk2DBaseView::GetRenderer()     // virtual 
265 {
266    return _imageViewer2XYZ->GetVtkImageViewer2()->GetRenderer();
267 }
268 //---------------------------------------------------------------------------
269 vtkRenderWindow* wxVtk2DBaseView::GetRenWin()           // virtual
270 {
271    return _imageViewer2XYZ->GetVtkImageViewer2()->GetRenderWindow();
272 }
273
274 //-------------------------------------------------------------------
275
276 void wxVtk2DBaseView::GetSpacing(double spc[3])  // virtual
277 {
278    vtkImageData *imageData      = GetVtkBaseData()->GetImageData();
279    imageData->GetSpacing(spc);
280 }
281
282 void wxVtk2DBaseView::setColorTransferFunction(vtkColorTransferFunction* colortable){
283         if(_imageViewer2XYZ!=NULL){
284                 _imageViewer2XYZ->setColorTransferFunction(colortable);
285                 this->Refresh();
286         }
287 }
288
289 void wxVtk2DBaseView::setWindowLevel(double level){
290 //      _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow(level);  
291
292         vtkImageMapToWindowLevelColors* imagemaptowindowlevel = _imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel();
293         imagemaptowindowlevel->SetWindow(level);
294         this->Refresh();
295 }
296
297 void wxVtk2DBaseView::setColorLevel(double level){
298 //      _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel(level);
299         vtkImageMapToWindowLevelColors* imagemaptowindowlevel = _imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel();
300         imagemaptowindowlevel->SetLevel(level);
301         this->Refresh();
302 }