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 //EED 27 sep 2006  (1/2)
00044 //      wxVtkMPR3DView *wxvtkmpr3Dview = (wxVtkMPR3DView *)_vtkInteractorStyleBaseView->GetWxVtk3DBaseView();
00045 //      double spc[3];
00046 //      wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetSpacing(spc);
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 //EED 27 sep 2006  (2/2)
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);  // Refresh
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 

Generated on 18 Mar 2010 for creaMaracasVisu_lib by  doxygen 1.6.1