]> 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         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         SetInteractorStyleImage( vtkInteractorStyleBaseView2D::New() );
79         
80 }
81
82
83 //-------------------------------------------------------------------
84 void wxVtk2DBaseView::Configure(bool okimage)
85 {
86         double spx,spy,spz;
87         int x1,x2,y1,y2,z1,z2;
88         wxVtkBaseView::Configure();
89
90 // EED 17 Oct 2007
91         if (_imageViewer2XYZ==NULL)
92         {
93                 _imageViewer2XYZ = new vtkImageViewer2_XYZ();
94                 wxVTKRenderWindowInteractor *iren = GetWxVTKRenderWindowInteractor();
95                 _imageViewer2XYZ -> GetVtkImageViewer2()->SetupInteractor ( iren );
96                 SetInteractorStyleImage( vtkInteractorStyleBaseView2D::New() );
97         }
98
99
100         vtkImageData *imageData = GetVtkBaseData()->GetMarImageData()->GetImageData();
101         if (imageData!=NULL){
102                 imageData->UpdateInformation();
103                 imageData->SetUpdateExtent( imageData->GetWholeExtent());
104                 imageData->Update();
105                 if (okimage==true){
106                         imageData->GetSpacing (spx,spy,spz);
107                         imageData->GetExtent (x1,x2,y1,y2,z1,z2);
108
109
110                         _imageViewer2XYZ->GetVtkImageViewer2()->SetInput(imageData );
111                         _imageViewer2XYZ->SetExtentDimension(x1,x2,y1,y2,z1,z2);
112                         double range[2];
113                           imageData->GetScalarRange(range);
114                           if (range[1]<20000){
115                                  _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow( (range[1]-range[0])/2 );
116                                  _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel( (range[1]+range[0])/4 );
117                           } else {
118                                  _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow( 1000 );
119                                  _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel( 500 );
120                           }
121 // EED 31 Janvier 2007
122 //vtkImageActor *vtkimageactor = _imageViewer2XYZ->GetVtkImageViewer2()->GetImageActor ();
123 //vtkimageactor->InterpolateOff ();
124 //vtkLookupTable * _collookup = vtkLookupTable::New( );
125 //_collookup->SetNumberOfColors( 256 );
126 //_collookup->SetTableRange( 0 , 255 );
127 //_collookup->Build( );
128 //_collookup->SetTableValue( 0  , 1 , 0 , 0 , 1 );
129 //_collookup->SetTableValue(128 , 0 , 0 , 1 , 1 );
130 //_collookup->SetTableValue(255 , 0 , 1 , 0 , 1 );
131 //_imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel ()->SetLookupTable(_collookup );
132
133
134 // EED 17 Oct 2007
135 //                      SetInteractorStyleImage( vtkInteractorStyleBaseView2D::New() );
136
137
138                         vtkImageViewer2 *IV2=_imageViewer2XYZ->GetVtkImageViewer2();
139                         vtkCamera *camera = IV2->GetRenderer()->GetActiveCamera();
140
141 //EED 17Avril2009       
142 /*                      
143                         camera->SetViewUp               ( spx*0                 , -spy*1                        , spz*0         );
144                         camera->SetPosition             ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , -spz*10000    ); 
145                         camera->SetFocalPoint   ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*0         ); 
146 */ 
147                         camera->SetViewUp               ( spx*0                 , spy*1                 , spz*0         );
148                         camera->SetPosition             ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*10000     ); 
149                         camera->SetFocalPoint   ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*0         ); 
150                         
151                         
152                         camera->SetClippingRange( 0.01                  , 1000000 );
153                         camera->ComputeViewPlaneNormal();
154                         camera->SetParallelScale( spx*(x2-x1)/3.0 );
155                         
156                         // text information over the graphic window
157                         if(_vtkIinfoTextImage == NULL){
158                                 _vtkIinfoTextImage              = new vtkInfoTextImage();
159                                 _vtkIinfoTextImageInteractor    = new vtkInfoTextImageInteractor();                             
160                                 ((vtkInteractorStyleBaseView*)this->GetInteractorStyleBaseView())->AddInteractorStyleMaracas(_vtkIinfoTextImageInteractor);
161                         }
162                         _vtkIinfoTextImage->SetWxVtk2DBaseView(this);
163                         _vtkIinfoTextImage->SetMarImageData( GetVtkBaseData()->GetMarImageData() );
164                         _vtkIinfoTextImageInteractor->SetModelVtkInfoTextImage(_vtkIinfoTextImage);                             
165                         _vtkIinfoTextImage->Configure();
166                         
167                 } // okimage
168         } // imageData
169
170 }
171
172 //-------------------------------------------------------------------
173
174 int     wxVtk2DBaseView::GetActualSlice()  // virtual 
175 {
176    return (int)(_vtkbasedata->GetZ());
177 }
178
179 //-------------------------------------------------------------------
180 void wxVtk2DBaseView::SetActualSlice(int slice)  // Virtual
181 {
182    _vtkbasedata->SetZ(slice);
183 }
184
185 //-------------------------------------------------------------------
186
187 vtkBaseData *wxVtk2DBaseView::GetVtkBaseData()
188 {
189    return _vtkbasedata;
190 }
191
192 //-------------------------------------------------------------------
193
194 void wxVtk2DBaseView::SetVtkBaseData(vtkBaseData *vtkbasedata)
195 {
196    _vtkbasedata=vtkbasedata;
197 }
198
199 //-------------------------------------------------------------------
200
201 void wxVtk2DBaseView::Refresh()
202 {
203    int z = (int)(GetVtkBaseData()->GetZ());
204   _imageViewer2XYZ->SetZSlice( z ); 
205
206    wxVtkBaseView::Refresh();
207 }
208
209 //-------------------------------------------------------------------
210
211 void wxVtk2DBaseView::SetInteractorStyleImage(vtkInteractorStyleBaseView *interactorstylebaseview)
212 {
213         SetInteractorStyleBaseView(interactorstylebaseview);
214
215         wxVTKRenderWindowInteractor *iren = GetWxVTKRenderWindowInteractor();
216         interactorstylebaseview->SetInteractor ( iren );
217         iren->SetInteractorStyle(interactorstylebaseview);
218         interactorstylebaseview->SetwxVtkBaseView(this);        
219
220         vtkMaracasImageViewer2Callback * cbk = vtkMaracasImageViewer2Callback::New();
221         cbk->IV = _imageViewer2XYZ->GetVtkImageViewer2();
222         interactorstylebaseview->AddObserver( vtkCommand::WindowLevelEvent, cbk );
223         interactorstylebaseview->AddObserver( vtkCommand::StartWindowLevelEvent, cbk );
224         interactorstylebaseview->AddObserver( vtkCommand::ResetWindowLevelEvent, cbk );
225         cbk->Delete();
226 }
227
228 //---------------------------------------------------------------------------
229 vtkRenderer* wxVtk2DBaseView::GetRenderer()     // virtual 
230 {
231    return _imageViewer2XYZ->GetVtkImageViewer2()->GetRenderer();
232 }
233 //---------------------------------------------------------------------------
234 vtkRenderWindow* wxVtk2DBaseView::GetRenWin()           // virtual
235 {
236    return _imageViewer2XYZ->GetVtkImageViewer2()->GetRenderWindow();
237 }
238
239 //-------------------------------------------------------------------
240
241 void wxVtk2DBaseView::GetSpacing(double spc[3])  // virtual
242 {
243    vtkImageData *imageData      = GetVtkBaseData()->GetImageData();
244    imageData->GetSpacing(spc);
245 }
246
247 void wxVtk2DBaseView::setColorTransferFunction(vtkColorTransferFunction* colortable){
248         if(_imageViewer2XYZ!=NULL){
249                 _imageViewer2XYZ->setColorTransferFunction(colortable);
250                 this->Refresh();
251         }
252 }
253
254 void wxVtk2DBaseView::setWindowLevel(double level){
255 //      _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow(level);  
256
257         vtkImageMapToWindowLevelColors* imagemaptowindowlevel = _imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel();
258         imagemaptowindowlevel->SetWindow(level);
259         this->Refresh();
260 }
261
262 void wxVtk2DBaseView::setColorLevel(double level){
263 //      _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel(level);
264         vtkImageMapToWindowLevelColors* imagemaptowindowlevel = _imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel();
265         imagemaptowindowlevel->SetLevel(level);
266         this->Refresh();
267 }