00001 #include "vtkmyPWCallback_3DPointWidget.h" 00002 #include "vtkInteractorStyleBaseView.h" 00003 00004 //------------------------------------------------------------------- 00005 //------------------------------------------------------------------- 00006 //------------------------------------------------------------------- 00007 void vtkmyPWCallback_3DPointWidget::Execute(vtkObject *caller, unsigned long, void*) 00008 { 00009 double n[3]; 00010 double p[3]; 00011 double delta = 0.000000001; 00012 00013 vtkInteractorStyleBaseView *isbv = (vtkInteractorStyleBaseView*)_wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetInteractorStyleBaseView(); 00014 00015 if (caller==_pointWidget) 00016 { 00017 _pointWidget->GetPosition(p); 00018 } 00019 if (caller==_planeWidget) 00020 { 00021 _planeWidget->GetCenter(p); 00022 _planeWidget->GetNormal(n); 00023 _wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->SetNormal(n[0],n[1],n[2]); 00024 } 00025 00026 double spc[3]; 00027 _wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetImageData()->GetSpacing(spc); 00028 p[0]=p[0]/spc[0]; 00029 p[1]=p[1]/spc[1]; 00030 p[2]=p[2]/spc[2]; 00031 00032 // Orientation change 00033 if ( (fabs(n[0]-_backNormal[0])>delta) || (fabs(n[1]-_backNormal[1])>delta) || (fabs(n[2]-_backNormal[2])>delta) ) 00034 { 00035 _backNormal[0] = n[0]; 00036 _backNormal[1] = n[1]; 00037 _backNormal[2] = n[2]; 00038 isbv->SetParent_refresh_waiting(); 00039 } 00040 00041 // ---------- 00042 00043 double tx = _wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetX(); 00044 double ty = _wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetY(); 00045 double tz = _wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetZ(); 00046 00047 // Position Change 00048 if ( (fabs(tx-p[0])>delta) || (fabs(ty-p[1])>delta) || (fabs(tz-p[2])>delta) ) 00049 { 00050 _wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->SetX( p[0] ); 00051 _wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->SetY( p[1] ); 00052 _wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->SetZ( p[2] ); 00053 vtkInteractorStyleBaseView *isbv = (vtkInteractorStyleBaseView*)_wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetInteractorStyleBaseView(); 00054 isbv->BlockRefresh(); 00055 isbv->vtkInteractorStyleBaseView::OnLeftButtonDown(); 00056 isbv->SetParent_refresh_waiting(); 00057 isbv->vtkInteractorStyleBaseView::OnMouseMove(); 00058 isbv->UnBlockRefresh(); 00059 } 00060 isbv->EvaluateToRefresh(); 00061 } 00062 //------------------------------------------------------------------- 00063 void vtkmyPWCallback_3DPointWidget::SetWxVtkMPR3DView( wxVtkMPR3DView *wxvtkmpr3Dview ) 00064 { 00065 _wxvtkmpr3Dview=wxvtkmpr3Dview; 00066 } 00067 //------------------------------------------------------------------- 00068 void vtkmyPWCallback_3DPointWidget::SetVtkPointWidget( vtkPointWidget *pointWidget ) 00069 { 00070 _pointWidget=pointWidget; 00071 } 00072 //------------------------------------------------------------------- 00073 void vtkmyPWCallback_3DPointWidget::SetVtkPlaneWidget( vtkPlaneWidget *planeWidget ) 00074 { 00075 _planeWidget=planeWidget; 00076 } 00077