]> Creatis software - creaVtk.git/blob - lib/creaVtk/creaVtkPlaneWidget.cpp
#3478 PointPickerNearest
[creaVtk.git] / lib / creaVtk / creaVtkPlaneWidget.cpp
1 /*
2 # ---------------------------------------------------------------------
3 #
4 # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image
5 #                        pour la Sante)
6 # Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
7 # Previous Authors : Laurent Guigues, Jean-Pierre Roux
8 # CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil
9 #
10 #  This software is governed by the CeCILL-B license under French law and
11 #  abiding by the rules of distribution of free software. You can  use,
12 #  modify and/ or redistribute the software under the terms of the CeCILL-B
13 #  license as circulated by CEA, CNRS and INRIA at the following URL
14 #  http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
15 #  or in the file LICENSE.txt.
16 #
17 #  As a counterpart to the access to the source code and  rights to copy,
18 #  modify and redistribute granted by the license, users are provided only
19 #  with a limited warranty  and the software's author,  the holder of the
20 #  economic rights,  and the successive licensors  have only  limited
21 #  liability.
22 #
23 #  The fact that you are presently reading this means that you have had
24 #  knowledge of the CeCILL-B license and that you accept its terms.
25 # ------------------------------------------------------------------------
26 */
27
28 #include "creaVtkPlaneWidget.h"
29
30 #include "vtkRenderWindow.h"
31
32
33
34 void creaVtkCallbackPlaneWidget::Execute(vtkObject *caller, unsigned long, void*)
35 {
36         if (creavtkplanewidget!=NULL)
37         {
38                 creavtkplanewidget->UpdatePlane();
39                 creavtkplanewidget->Execute();
40         }               
41 }
42
43
44 //------------------------------------------------------------------------
45 //------------------------------------------------------------------------
46 //------------------------------------------------------------------------
47 //------------------------------------------------------------------------
48 //------------------------------------------------------------------------
49 creaVtkPlaneWidget::creaVtkPlaneWidget()
50 {
51         _firsttime              = true;
52         _representation = 1;
53         _vPlaneWidget   = vtkPlaneWidget::New();
54         _vPlaneSource   = vtkPlaneSource::New();
55 }
56
57 //------------------------------------------------------------------------
58 creaVtkPlaneWidget::~creaVtkPlaneWidget()
59 {
60         _vPlaneWidget->Delete();
61 }
62
63 //------------------------------------------------------------------------
64 void creaVtkPlaneWidget::SetImage(vtkImageData* image)
65 {
66         _image = image;
67 }
68
69 //------------------------------------------------------------------------
70 vtkImageData* creaVtkPlaneWidget::GetImage()
71 {
72         return _image;
73 }
74
75 //------------------------------------------------------------------------
76 void creaVtkPlaneWidget::SetActive(bool active)
77 {
78         _active = active;
79 }
80
81 //------------------------------------------------------------------------
82 bool creaVtkPlaneWidget::GetActive()
83 {
84         return _active;
85 }
86
87 //------------------------------------------------------------------------
88 void creaVtkPlaneWidget::SetRenderer(vtkRenderer* renderer)
89 {
90         _renderer = renderer;
91 }
92
93 //------------------------------------------------------------------------
94 vtkRenderer* creaVtkPlaneWidget::GetRenderer()
95 {
96         return _renderer;
97 }
98
99 //------------------------------------------------------------------------
100 vtkPlaneSource* creaVtkPlaneWidget::GetPlaneSource()
101 {
102         return _vPlaneSource;
103 }
104
105 //------------------------------------------------------------------------
106 void creaVtkPlaneWidget::SetResolution(int resolution)
107 {
108         _resolution = resolution;
109 }
110
111 //------------------------------------------------------------------------
112 int creaVtkPlaneWidget::GetResolution()
113 {
114         return _resolution;
115 }
116
117
118 //------------------------------------------------------------------------
119 void creaVtkPlaneWidget::SetRepresentation(int representation)
120 {
121         _representation = representation;
122 }
123
124 //------------------------------------------------------------------------
125 int creaVtkPlaneWidget::GetRepresentation()
126 {
127         return _representation;
128 }
129
130
131
132 //------------------------------------------------------------------------
133 std::vector<double> creaVtkPlaneWidget::GetCenter()
134 {
135         std::vector<double> vecCenter;
136         double point[3];
137         _vPlaneWidget->GetCenter(point);
138         vecCenter.push_back(point[0]);
139         vecCenter.push_back(point[1]);
140         vecCenter.push_back(point[2]);
141         return vecCenter;
142 }
143
144 //------------------------------------------------------------------------
145 std::vector<double> creaVtkPlaneWidget::GetNormal()
146 {
147         std::vector<double> vecNormal;
148         double point[3];
149         _vPlaneWidget->GetNormal(point);
150         vecNormal.push_back(point[0]);
151         vecNormal.push_back(point[1]);
152         vecNormal.push_back(point[2]);
153         return vecNormal;
154 }
155
156 void creaVtkPlaneWidget::SetOrigin(std::vector<double> origin)
157 {
158         _origin = origin;
159 }
160
161 void creaVtkPlaneWidget::SetNormalIn(std::vector<double> normalin)
162 {
163     _normalin = normalin;
164 }
165
166
167 //------------------------------------------------------------------------
168 void creaVtkPlaneWidget::Process()
169 {
170    if ((GetActive()==true) && (GetRenderer()!=NULL))
171     {
172         if (_origin.size()==0)
173         {
174             _origin.push_back(0);
175             _origin.push_back(0);
176             _origin.push_back(0);
177         }
178         if (_origin.size()==0)
179         {
180             _normalin.push_back(0);
181             _normalin.push_back(0);
182             _normalin.push_back(1);
183         }
184
185         //EED 2017-01-01 Migration VTK7
186         #if VTK_MAJOR_VERSION <= 5
187                 _vPlaneWidget->SetInput( GetImage() );
188         #else
189                 _vPlaneWidget->SetInputData( GetImage() );
190         #endif
191                 _vPlaneWidget->SetInteractor( GetRenderer()->GetRenderWindow()->GetInteractor() );
192                 _vPlaneWidget->NormalToXAxisOn();
193                 _vPlaneWidget->NormalToZAxisOn();
194                 _vPlaneWidget->SetResolution(_resolution);
195                 if (_representation==0){ _vPlaneWidget->SetRepresentationToOutline();   }
196                 if (_representation==1){ _vPlaneWidget->SetRepresentationToWireframe(); }
197                 if (_representation==2){ _vPlaneWidget->SetRepresentationToSurface();   }
198                 _vPlaneWidget->SetPlaceFactor(1); //defini zoom initial
199                 _vPlaneWidget->SetHandleSize(0.001);
200                 _vPlaneWidget->On();
201 //              _vPlaneWidget->Print(std::cout);
202                 if (_origin.size()==3)
203                 {
204                         _vPlaneWidget->SetCenter( _origin[0] , _origin[1] , _origin[2] );
205                 } // if _origin
206         if (_normalin.size()==3)
207         {
208             _vPlaneWidget->SetNormal( _normalin[0] , _normalin[1] , _normalin[2] );
209         } // if _origin
210                 if (_firsttime==true )
211                 { 
212                         _firsttime = false;
213                         _vPlaneWidget->PlaceWidget();
214                         creaVtkCallbackPlaneWidget *creavtkcallbackplanewidget  = creaVtkCallbackPlaneWidget::New();
215                         creavtkcallbackplanewidget->creavtkplanewidget                  = this ;
216                         _vPlaneWidget->AddObserver( vtkCommand::InteractionEvent , creavtkcallbackplanewidget );
217                         _vPlaneWidget->AddObserver( vtkCommand::StartInteractionEvent , creavtkcallbackplanewidget );
218                         _vPlaneWidget->AddObserver( vtkCommand::EnableEvent , creavtkcallbackplanewidget );
219             
220             _vPlaneWidget->SetOrigin( _origin[0]    , _origin[1]    , _origin[2]  );
221             _vPlaneWidget->SetPoint1( _origin[0]+20 , _origin[1]    , _origin[2]  );
222             _vPlaneWidget->SetPoint2( _origin[0]    , _origin[1]+20 , _origin[2]  );
223
224                 }
225                 UpdatePlane();
226     } else {
227                 _vPlaneWidget->Off();
228     } // if Active Render
229 }
230
231
232
233
234 //------------------------------------------------------------------------
235 void creaVtkPlaneWidget::UpdatePlane()
236 {
237         double p0[3];
238         double p1[3];
239         double p2[3];
240         double n[3];
241         double c[3];
242         _vPlaneWidget->GetOrigin(p0);
243         _vPlaneWidget->GetCenter(c); //These is from Execute Method
244         _vPlaneWidget->GetNormal(n);
245         _vPlaneWidget->GetPoint1(p1);
246         _vPlaneWidget->GetPoint2(p2);
247         
248         _vPlaneSource->SetResolution( GetResolution(),  GetResolution() );
249         _vPlaneSource->SetOrigin( p0 );
250         _vPlaneSource->SetPoint1( p1 );
251         _vPlaneSource->SetPoint2( p2 );
252         _vPlaneSource->Update( );
253         _vPlaneSource->SetNormal( n[ 0 ], n[ 1 ], n[ 2 ] );
254         _vPlaneSource->Update( );
255         _vPlaneSource->SetCenter( c );
256         _vPlaneSource->Update( );
257 }       
258
259 //------------------------------------------------------------------------
260 void creaVtkPlaneWidget::Execute()  // virutal
261 {
262         printf("EED creaVtkPlaneWidget::Execute (virtual )\n");
263 }
264
265