00001 00002 #include "manualInteractorWindowLevel.h" 00003 #include "wxVtk2DBaseView.h" 00004 //------------------------------------------------------------------- 00005 //------------------------------------------------------------------- 00006 //------------------------------------------------------------------- 00007 00008 manualInteractorWindowLevel::manualInteractorWindowLevel() 00009 { 00010 _stateWindowLevel = false; 00011 _backPx = 0; 00012 _backPy = 0; 00013 _backWindow = -1; 00014 _backLevel = -1; 00015 } 00016 00017 //------------------------------------------------------------------- 00018 00019 manualInteractorWindowLevel::~manualInteractorWindowLevel() 00020 { 00021 } 00022 00023 //------------------------------------------------------------------- 00024 00025 bool manualInteractorWindowLevel::OnMouseMove() // virtual 00026 { 00027 00028 if (_stateWindowLevel==true) 00029 { 00030 int tmpPx,tmpPy; 00031 wxVTKRenderWindowInteractor *wxVTKiren; 00032 wxVTKiren = _vtkInteractorStyleBaseView->GetWxVtk2DBaseView()->GetWxVTKRenderWindowInteractor(); 00033 wxVTKiren->GetEventPosition( tmpPx , tmpPy ); 00034 00035 double colorWin; 00036 double colorLev; 00037 00038 vtkImageData* imgrange = ((wxVtk2DBaseView*)_vtkInteractorStyleBaseView->GetWxVtk2DBaseView())->GetVtkBaseData()->GetImageData(); 00039 00040 if(imgrange != NULL){ 00041 double* scalarrange = imgrange->GetScalarRange(); 00042 double scalarr = scalarrange[1] - scalarrange[0]; 00043 //std::cout<<"scalar r="<<scalarr<<std::endl; 00044 int w, h; 00045 ((wxWindow*)wxVTKiren)->GetSize(&w, &h); 00046 00047 double dw=w,dh=h; 00048 double dx = (scalarr*( _backPx - tmpPx ))/dw; 00049 double dy = (scalarr*( _backPy - tmpPy ))/dh; 00050 00051 //colorWin=_backWindow - (scalarr)*( _backPx - tmpPx ); 00052 colorWin=_backWindow - dx; 00053 colorLev=_backLevel + dy; 00054 }else{ 00055 colorWin=_backWindow - 2*( _backPx - tmpPx ); 00056 colorLev=_backLevel + 2*( _backPy - tmpPy ); 00057 } 00058 00059 if (colorWin<0) 00060 { 00061 colorWin=0; 00062 } 00063 if (colorWin>100000) 00064 { 00065 colorWin=100000; 00066 } 00067 00068 if (colorLev<0) 00069 { 00070 colorLev=0; 00071 } 00072 if (colorLev>100000) 00073 { 00074 colorLev=100000; 00075 } 00076 vtkImageViewer2 *vtkimageviewer2; 00077 vtkimageviewer2=((wxVtk2DBaseView*)_vtkInteractorStyleBaseView->GetWxVtk2DBaseView())->_imageViewer2XYZ->GetVtkImageViewer2(); 00078 vtkimageviewer2->SetColorWindow(colorWin); 00079 vtkimageviewer2->SetColorLevel(colorLev); 00080 // vtkimageviewer2->Render(); 00081 } 00082 return true; 00083 } 00084 00085 //------------------------------------------------------------------- 00086 00087 bool manualInteractorWindowLevel::OnMiddleButtonDown() // virtual 00088 { 00089 if ((_vtkInteractorStyleBaseView->GetInteractor()->GetControlKey()==0) && 00090 (_vtkInteractorStyleBaseView->GetInteractor()->GetShiftKey()==0) ){ 00091 _stateWindowLevel = true; 00092 wxVTKRenderWindowInteractor *wxVTKiren; 00093 wxVTKiren = _vtkInteractorStyleBaseView->GetWxVtk2DBaseView()->GetWxVTKRenderWindowInteractor(); 00094 wxVTKiren->GetEventPosition( _backPx , _backPy ); 00095 _backWindow = ((wxVtk2DBaseView*)_vtkInteractorStyleBaseView->GetWxVtk2DBaseView())->_imageViewer2XYZ->GetVtkImageViewer2()->GetColorWindow(); 00096 _backLevel = ((wxVtk2DBaseView*)_vtkInteractorStyleBaseView->GetWxVtk2DBaseView())->_imageViewer2XYZ->GetVtkImageViewer2()->GetColorLevel(); 00097 } 00098 return true; 00099 } 00100 00101 //------------------------------------------------------------------- 00102 00103 bool manualInteractorWindowLevel::OnMiddleButtonUp() // virtual 00104 { 00105 if (_stateWindowLevel==true) 00106 { 00107 _stateWindowLevel=false; 00108 } 00109 return true; 00110 }