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 00036 int colorWin; 00037 int colorLev; 00038 00039 00040 vtkImageData* imgrange = ((wxVtk2DBaseView*)_vtkInteractorStyleBaseView->GetWxVtk2DBaseView())->GetVtkBaseData()->GetImageData(); 00041 00042 if(imgrange != NULL){ 00043 double* scalarrange = imgrange->GetScalarRange(); 00044 double scalarr = scalarrange[1] - scalarrange[0]; 00045 //std::cout<<"scalar r="<<scalarr<<std::endl; 00046 int w, h; 00047 ((wxWindow*)wxVTKiren)->GetSize(&w, &h); 00048 int dx = (scalarr*( _backPx - tmpPx ))/w; 00049 int dy = (scalarr*( _backPy - tmpPy ))/h; 00050 //colorWin=_backWindow - (scalarr)*( _backPx - tmpPx ); 00051 colorWin=_backWindow - dx; 00052 colorLev=_backLevel + dy; 00053 }else{ 00054 colorWin=_backWindow - 2*( _backPx - tmpPx ); 00055 colorLev=_backLevel + 2*( _backPy - tmpPy ); 00056 } 00057 00058 if (colorWin<0) 00059 { 00060 colorWin=0; 00061 } 00062 if (colorWin>100000) 00063 { 00064 colorWin=100000; 00065 } 00066 00067 if (colorLev<0) 00068 { 00069 colorLev=0; 00070 } 00071 if (colorLev>100000) 00072 { 00073 colorLev=100000; 00074 } 00075 vtkImageViewer2 *vtkimageviewer2; 00076 vtkimageviewer2=((wxVtk2DBaseView*)_vtkInteractorStyleBaseView->GetWxVtk2DBaseView())->_imageViewer2XYZ->GetVtkImageViewer2(); 00077 vtkimageviewer2->SetColorWindow(colorWin); 00078 vtkimageviewer2->SetColorLevel(colorLev); 00079 // vtkimageviewer2->Render(); 00080 } 00081 return true; 00082 } 00083 00084 //------------------------------------------------------------------- 00085 00086 bool manualInteractorWindowLevel::OnMiddleButtonDown() // virtual 00087 { 00088 if ((_vtkInteractorStyleBaseView->GetInteractor()->GetControlKey()==0) && 00089 (_vtkInteractorStyleBaseView->GetInteractor()->GetShiftKey()==0) ){ 00090 00091 _stateWindowLevel = true; 00092 wxVTKRenderWindowInteractor *wxVTKiren; 00093 wxVTKiren = _vtkInteractorStyleBaseView->GetWxVtk2DBaseView()->GetWxVTKRenderWindowInteractor(); 00094 wxVTKiren->GetEventPosition( _backPx , _backPy ); 00095 00096 _backWindow = (int)(((wxVtk2DBaseView*)_vtkInteractorStyleBaseView->GetWxVtk2DBaseView())->_imageViewer2XYZ->GetVtkImageViewer2()->GetColorWindow()); 00097 _backLevel = (int)(((wxVtk2DBaseView*)_vtkInteractorStyleBaseView->GetWxVtk2DBaseView())->_imageViewer2XYZ->GetVtkImageViewer2()->GetColorLevel()); 00098 } 00099 return true; 00100 } 00101 00102 //------------------------------------------------------------------- 00103 00104 bool manualInteractorWindowLevel::OnMiddleButtonUp() // virtual 00105 { 00106 if (_stateWindowLevel==true) 00107 { 00108 _stateWindowLevel=false; 00109 } 00110 return true; 00111 }