vtkInteractorStyle3DView.cxx
Go to the documentation of this file.00001 #include "vtkInteractorStyle3DView.h"
00002 #include "matrix.h"
00003 #include "vtkPointPicker.h"
00004 #include "UtilVtk3DGeometriSelection.h"
00005
00006 vtkInteractorStyle3DView::vtkInteractorStyle3DView()
00007 {
00008 }
00009
00010 vtkInteractorStyle3DView::~vtkInteractorStyle3DView()
00011 {
00012 }
00013
00014 bool vtkInteractorStyle3DView::OnLeftDClick()
00015 {
00016 SelectMarchibCubePoint();
00017 return true;
00018 }
00019
00020 bool vtkInteractorStyle3DView::SelectMarchibCubePoint()
00021 {
00022 bool ok=false;
00023 gtm::TVector< double > pO( 3 ), pF( 3 ), pp( 3 ), cp( 3 );
00024 gtm::TVector< double > xc( 3 );
00025 gtm::TVector< double > x1( 3 ), n1( 3 );
00026 gtm::TVector< double > x2( 3 ), n2( 3 );
00027
00028 double pickPoint[ 3 ], cameraPos[ 3 ];
00029 int eventrwi[2];
00030 vtkPointPicker* picker = vtkPointPicker::New( );
00031 eventrwi[0]= _vtkInteractorStyleBaseView->GetInteractor()->GetEventPosition()[0];
00032 eventrwi[1]= _vtkInteractorStyleBaseView->GetInteractor()->GetEventPosition()[1];
00033 vtkRenderer *pRenderer = _vtkInteractorStyleBaseView->GetWxVtk3DBaseView()->GetRenderer();
00034 picker->Pick( eventrwi[0], eventrwi[1], 0.0, pRenderer );
00035 pRenderer->GetActiveCamera( )->GetPosition( cameraPos );
00036 picker->GetPickPosition( pickPoint );
00037 picker->Delete( );
00038
00039 pp( 0 ) = pickPoint[ 0 ]; pp( 1 ) = pickPoint[ 1 ]; pp( 2 ) = pickPoint[ 2 ];
00040 cp( 0 ) = cameraPos[ 0 ]; cp( 1 ) = cameraPos[ 1 ]; cp( 2 ) = cameraPos[ 2 ];
00041
00042
00043
00044
00045
00046
00047
00048
00049 vtkImageData *imageData = GetWxVtkMPR3DView()->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetImageData();
00050 int dim[3];
00051 double spc[3];
00052 imageData->GetDimensions(dim);
00053 imageData->GetSpacing(spc);
00054
00055
00056 vtkMarchingCubes *mcubes = _wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetMCubes(0);
00057
00058
00059 UtilVtk3DGeometriSelection utilVtk3DGeometriSelection;
00060 utilVtk3DGeometriSelection.SetDimentions(dim[0],dim[1],dim[2]);
00061
00062 utilVtk3DGeometriSelection.SetMarchingCube(mcubes);
00063
00064 double fac;
00065 fac = GTM_MAX( dim[0], dim[2] );
00066
00067
00068 if( utilVtk3DGeometriSelection.FindCubePointsFromPoints(
00069 pO.GetAnsiRef( ), pF.GetAnsiRef( ),
00070 pp.GetAnsiRef( ), cp.GetAnsiRef( ) ) )
00071 {
00072
00073 if( utilVtk3DGeometriSelection.GetPointAndNormalIntersection(
00074 x1.GetAnsiRef( ), n1.GetAnsiRef( ),
00075 pO.GetAnsiRef( ), pF.GetAnsiRef( ) ) )
00076 {
00077 if( utilVtk3DGeometriSelection.GetPointAndNormalIntersection(
00078 x2.GetAnsiRef( ), n2.GetAnsiRef( ),
00079 ( x1 - n1 ).GetAnsiRef( ), ( x1 - ( n1 * fac ) ).GetAnsiRef( ) ) )
00080 {
00081 xc = ( x2 + x1 ) * 0.5;
00082
00083 this->_wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->SetX(xc(0)/spc[0]);
00084 this->_wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->SetY(xc(1)/spc[1]);
00085 this->_wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->SetZ(xc(2)/spc[2]);
00086 wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121);
00087 this->_wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
00088 ok=true;
00089 }
00090 }
00091 }
00092
00093
00094 return ok;
00095 }
00096
00097 void vtkInteractorStyle3DView::SetWxVtkMPR3DView( wxVtkMPR3DView *wxvtkmpr3Dview )
00098 {
00099 _wxvtkmpr3Dview = wxvtkmpr3Dview;
00100 }
00101
00102 wxVtkMPR3DView *vtkInteractorStyle3DView::GetWxVtkMPR3DView()
00103 {
00104 return _wxvtkmpr3Dview;
00105 }
00106
00107 wxVtkClipping3DView *vtkInteractorStyle3DView::GetWxVtkClipping3DView()
00108 {
00109 return _wxvtkclipping3Dview;
00110 }
00111
00112 void vtkInteractorStyle3DView::SetWxVtkClipping3DView( wxVtkClipping3DView *wxvtkclipping3Dview)
00113 {
00114 _wxvtkclipping3Dview = wxvtkclipping3Dview;
00115 }
00116