1 #include "vtkInteractorStyle3DView.h"
3 #include "vtkPointPicker.h"
4 #include "UtilVtk3DGeometriSelection.h"
6 vtkInteractorStyle3DView::vtkInteractorStyle3DView()
9 //---------------------------------------------------------------------------
10 vtkInteractorStyle3DView::~vtkInteractorStyle3DView()
13 //---------------------------------------------------------------------------
14 bool vtkInteractorStyle3DView::OnLeftDClick()
16 SelectMarchibCubePoint();
19 //---------------------------------------------------------------------------
20 bool vtkInteractorStyle3DView::SelectMarchibCubePoint()
23 gtm::TVector< double > pO( 3 ), pF( 3 ), pp( 3 ), cp( 3 );
24 gtm::TVector< double > xc( 3 );
25 gtm::TVector< double > x1( 3 ), n1( 3 );
26 gtm::TVector< double > x2( 3 ), n2( 3 );
28 double pickPoint[ 3 ], cameraPos[ 3 ];
30 vtkPointPicker* picker = vtkPointPicker::New( );
31 eventrwi[0]= _vtkInteractorStyleBaseView->GetInteractor()->GetEventPosition()[0];
32 eventrwi[1]= _vtkInteractorStyleBaseView->GetInteractor()->GetEventPosition()[1];
33 vtkRenderer *pRenderer = _vtkInteractorStyleBaseView->GetWxVtk3DBaseView()->GetRenderer();
34 picker->Pick( eventrwi[0], eventrwi[1], 0.0, pRenderer );
35 pRenderer->GetActiveCamera( )->GetPosition( cameraPos );
36 picker->GetPickPosition( pickPoint );
39 pp( 0 ) = pickPoint[ 0 ]; pp( 1 ) = pickPoint[ 1 ]; pp( 2 ) = pickPoint[ 2 ];
40 cp( 0 ) = cameraPos[ 0 ]; cp( 1 ) = cameraPos[ 1 ]; cp( 2 ) = cameraPos[ 2 ];
43 //EED 27 sep 2006 (1/2)
44 // wxVtkMPR3DView *wxvtkmpr3Dview = (wxVtkMPR3DView *)_vtkInteractorStyleBaseView->GetWxVtk3DBaseView();
46 // wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetSpacing(spc);
49 vtkImageData *imageData = GetWxVtkMPR3DView()->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetImageData();
52 imageData->GetDimensions(dim);
53 imageData->GetSpacing(spc);
56 vtkMarchingCubes *mcubes = _wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetMCubes(0);
59 UtilVtk3DGeometriSelection utilVtk3DGeometriSelection;
60 utilVtk3DGeometriSelection.SetDimentions(dim[0],dim[1],dim[2]);
62 utilVtk3DGeometriSelection.SetMarchingCube(mcubes);
65 fac = GTM_MAX( dim[0], dim[2] );
68 if( utilVtk3DGeometriSelection.FindCubePointsFromPoints(
69 pO.GetAnsiRef( ), pF.GetAnsiRef( ),
70 pp.GetAnsiRef( ), cp.GetAnsiRef( ) ) )
73 if( utilVtk3DGeometriSelection.GetPointAndNormalIntersection(
74 x1.GetAnsiRef( ), n1.GetAnsiRef( ),
75 pO.GetAnsiRef( ), pF.GetAnsiRef( ) ) )
77 if( utilVtk3DGeometriSelection.GetPointAndNormalIntersection(
78 x2.GetAnsiRef( ), n2.GetAnsiRef( ),
79 ( x1 - n1 ).GetAnsiRef( ), ( x1 - ( n1 * fac ) ).GetAnsiRef( ) ) )
81 xc = ( x2 + x1 ) * 0.5;
82 //EED 27 sep 2006 (2/2)
83 this->_wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->SetX(xc(0)/spc[0]);
84 this->_wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->SetY(xc(1)/spc[1]);
85 this->_wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->SetZ(xc(2)/spc[2]);
86 wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121); // Refresh
87 this->_wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
96 //-------------------------------------------------------------------
97 void vtkInteractorStyle3DView::SetWxVtkMPR3DView( wxVtkMPR3DView *wxvtkmpr3Dview )
99 _wxvtkmpr3Dview = wxvtkmpr3Dview;
101 //-------------------------------------------------------------------
102 wxVtkMPR3DView *vtkInteractorStyle3DView::GetWxVtkMPR3DView()
104 return _wxvtkmpr3Dview;
106 //-------------------------------------------------------------------
107 wxVtkClipping3DView *vtkInteractorStyle3DView::GetWxVtkClipping3DView()
109 return _wxvtkclipping3Dview;
111 //-------------------------------------------------------------------
112 void vtkInteractorStyle3DView::SetWxVtkClipping3DView( wxVtkClipping3DView *wxvtkclipping3Dview)
114 _wxvtkclipping3Dview = wxvtkclipping3Dview;