]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/vtkInteractorStyle3DView.cxx
ab60541fb406802a888c12c06a56fe419552ff62
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / vtkInteractorStyle3DView.cxx
1 #include "vtkInteractorStyle3DView.h"
2 #include "matrix.h"
3 #include "vtkPointPicker.h"
4 #include "UtilVtk3DGeometriSelection.h"
5
6 vtkInteractorStyle3DView::vtkInteractorStyle3DView()
7 {
8 }
9 //---------------------------------------------------------------------------
10 vtkInteractorStyle3DView::~vtkInteractorStyle3DView()
11 {
12 }
13 //---------------------------------------------------------------------------
14 bool vtkInteractorStyle3DView::OnLeftDClick()
15 {
16         SelectMarchibCubePoint();
17         return true;
18 }
19 //---------------------------------------------------------------------------
20 bool vtkInteractorStyle3DView::SelectMarchibCubePoint()
21 {
22         bool ok=false;
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 );
27
28         double pickPoint[ 3 ], cameraPos[ 3 ];
29         int eventrwi[2];
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 );
37         picker->Delete( );
38
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 ];
41
42
43 //EED 27 sep 2006  (1/2)
44 //      wxVtkMPR3DView *wxvtkmpr3Dview = (wxVtkMPR3DView *)_vtkInteractorStyleBaseView->GetWxVtk3DBaseView();
45 //      double spc[3];
46 //      wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetSpacing(spc);
47
48
49         vtkImageData *imageData = GetWxVtkMPR3DView()->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetImageData();
50         int dim[3];
51         double spc[3];
52         imageData->GetDimensions(dim);
53         imageData->GetSpacing(spc);
54
55
56         vtkMarchingCubes *mcubes = _wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetMCubes(0);
57         
58
59         UtilVtk3DGeometriSelection utilVtk3DGeometriSelection;
60         utilVtk3DGeometriSelection.SetDimentions(dim[0],dim[1],dim[2]);
61
62         utilVtk3DGeometriSelection.SetMarchingCube(mcubes);
63
64     double fac;
65     fac = GTM_MAX( dim[0], dim[2] );
66
67
68     if( utilVtk3DGeometriSelection.FindCubePointsFromPoints(
69       pO.GetAnsiRef( ), pF.GetAnsiRef( ),
70       pp.GetAnsiRef( ), cp.GetAnsiRef( ) )  ) 
71         {
72
73                 if( utilVtk3DGeometriSelection.GetPointAndNormalIntersection(
74                             x1.GetAnsiRef( ), n1.GetAnsiRef( ),
75                                 pO.GetAnsiRef( ), pF.GetAnsiRef( ) ) ) 
76                 {
77                     if( utilVtk3DGeometriSelection.GetPointAndNormalIntersection(
78                               x2.GetAnsiRef( ), n2.GetAnsiRef( ),
79                                  ( x1 - n1 ).GetAnsiRef( ), ( x1 - ( n1 * fac ) ).GetAnsiRef( )   ) ) 
80                         {
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);
88                                 ok=true;
89                         }
90                 }
91         }
92
93
94         return ok;
95 }
96 //-------------------------------------------------------------------
97 void vtkInteractorStyle3DView::SetWxVtkMPR3DView( wxVtkMPR3DView *wxvtkmpr3Dview )
98 {
99         _wxvtkmpr3Dview = wxvtkmpr3Dview;
100 }
101 //-------------------------------------------------------------------
102 wxVtkMPR3DView *vtkInteractorStyle3DView::GetWxVtkMPR3DView()
103 {
104         return _wxvtkmpr3Dview;
105 }
106 //-------------------------------------------------------------------
107 wxVtkClipping3DView *vtkInteractorStyle3DView::GetWxVtkClipping3DView()
108 {
109         return _wxvtkclipping3Dview;
110 }
111 //-------------------------------------------------------------------
112 void vtkInteractorStyle3DView::SetWxVtkClipping3DView( wxVtkClipping3DView *wxvtkclipping3Dview)
113 {
114         _wxvtkclipping3Dview = wxvtkclipping3Dview;
115 }
116