]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/manualInteractorWindowLevel.cxx
ae28411d62680b9c77a49a5db11cead52628068b
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / manualInteractorWindowLevel.cxx
1
2 #include "manualInteractorWindowLevel.h"
3 #include "wxVtk2DBaseView.h"
4 //-------------------------------------------------------------------
5 //-------------------------------------------------------------------
6 //-------------------------------------------------------------------
7
8 manualInteractorWindowLevel::manualInteractorWindowLevel()
9 {
10         _stateWindowLevel       =       false;
11         _backPx                         =       0;
12         _backPy                         =       0;
13         _backWindow                     =       -1;
14         _backLevel                      =       -1;
15 }
16
17 //-------------------------------------------------------------------
18
19 manualInteractorWindowLevel::~manualInteractorWindowLevel()
20 {
21 }
22
23 //-------------------------------------------------------------------
24
25 bool manualInteractorWindowLevel::OnMouseMove()                 // virtual 
26 {
27         if (_stateWindowLevel==true)
28         {
29                 int tmpPx,tmpPy;
30                 wxVTKRenderWindowInteractor *wxVTKiren;
31                 wxVTKiren = _vtkInteractorStyleBaseView->GetWxVtk2DBaseView()->GetWxVTKRenderWindowInteractor();
32                 wxVTKiren->GetEventPosition( tmpPx , tmpPy );
33
34                 double colorWin;
35                 double colorLev;
36                 
37                 vtkImageData* imgrange = ((wxVtk2DBaseView*)_vtkInteractorStyleBaseView->GetWxVtk2DBaseView())->GetVtkBaseData()->GetImageData();
38
39                 if(imgrange != NULL){
40                         double* scalarrange = imgrange->GetScalarRange();
41                         double scalarr = scalarrange[1] - scalarrange[0];
42                         //std::cout<<"scalar r="<<scalarr<<std::endl;
43                         int w, h;
44                         ((wxWindow*)wxVTKiren)->GetSize(&w, &h);                        
45
46                         double dw=w,dh=h;
47                         double dx = (scalarr*( _backPx - tmpPx ))/dw;
48                         double dy = (scalarr*( _backPy - tmpPy ))/dh;
49
50                         //colorWin=_backWindow - (scalarr)*( _backPx - tmpPx );
51                         colorWin=_backWindow - dx;
52                         colorLev=_backLevel  + dy;
53                 }else{
54                         colorWin=_backWindow - 2*( _backPx - tmpPx );
55                         colorLev=_backLevel  + 2*( _backPy - tmpPy );
56                 }
57
58                 if (colorWin<0)
59                 { 
60                         colorWin=0;
61                 }
62                 if (colorWin>100000)
63                 { 
64                         colorWin=100000;
65                 }       
66                 
67 //EED 2 Nov 2012  This lets see negative values with the interaction of Window-Level Color
68 //              if (colorLev<0)
69 //              { 
70 //                      colorLev=0;
71 //              }
72                 
73                 if (colorLev>100000)
74                 { 
75                         colorLev=100000;
76                 }
77                 
78                 wxVtk2DBaseView *wxvtk2Dbaseview        = (wxVtk2DBaseView*)_vtkInteractorStyleBaseView->GetWxVtk2DBaseView();
79                 vtkBaseData *vtkbasedata                        = wxvtk2Dbaseview->GetVtkBaseData();
80                 
81 //EED Borrame
82 //              vtkImageViewer2 *vtkimageviewer2        = wxvtk2Dbaseview->_imageViewer2XYZ->GetVtkImageViewer2();              
83 //              vtkimageviewer2->SetColorWindow(colorWin);
84 //              vtkimageviewer2->SetColorLevel(colorLev);
85                 
86                 vtkbasedata->SetColorWindow(colorWin);
87                 vtkbasedata->SetColorLevel(colorLev);
88                 
89                 this->_vtkInteractorStyleBaseView->SetParent_refresh_waiting();
90                 
91 //              vtkimageviewer2->Render();
92         }
93         return true;
94 }
95
96 //-------------------------------------------------------------------
97
98 bool manualInteractorWindowLevel::OnMiddleButtonDown()  // virtual 
99 {
100         if ((_vtkInteractorStyleBaseView->GetInteractor()->GetControlKey()==0) &&
101                 (_vtkInteractorStyleBaseView->GetInteractor()->GetShiftKey()==0) ){
102                 _stateWindowLevel       = true;
103                 wxVTKRenderWindowInteractor *wxVTKiren;
104                 wxVTKiren = _vtkInteractorStyleBaseView->GetWxVtk2DBaseView()->GetWxVTKRenderWindowInteractor();
105                 wxVTKiren->GetEventPosition( _backPx , _backPy );
106                 _backWindow = ((wxVtk2DBaseView*)_vtkInteractorStyleBaseView->GetWxVtk2DBaseView())->_imageViewer2XYZ->GetVtkImageViewer2()->GetColorWindow();
107                 _backLevel  = ((wxVtk2DBaseView*)_vtkInteractorStyleBaseView->GetWxVtk2DBaseView())->_imageViewer2XYZ->GetVtkImageViewer2()->GetColorLevel();
108         }
109         return true;
110 }
111
112 //-------------------------------------------------------------------
113
114 bool manualInteractorWindowLevel::OnMiddleButtonUp()            // virtual
115 {
116         if (_stateWindowLevel==true)
117         {
118                 _stateWindowLevel=false;
119         }
120         return true;
121 }