]> Creatis software - creaVtk.git/blob - lib/creaVtk/creaVtkPlaneWidget.cpp
39cca10c7502c937298b74332a66cd9d1c81057c
[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 //------------------------------------------------------------------------
162 void creaVtkPlaneWidget::Process()
163 {    
164     if ((GetActive()==true) && (GetRenderer()!=NULL))
165     { 
166
167         //EED 2017-01-01 Migration VTK7
168         #if VTK_MAJOR_VERSION <= 5
169                 _vPlaneWidget->SetInput( GetImage() );
170         #else
171                 _vPlaneWidget->SetInputData( GetImage() );
172         #endif
173                 _vPlaneWidget->SetInteractor( GetRenderer()->GetRenderWindow()->GetInteractor() );
174                 _vPlaneWidget->NormalToXAxisOn();
175                 _vPlaneWidget->NormalToZAxisOn();
176                 _vPlaneWidget->SetResolution(_resolution);
177                 if (_representation==0){ _vPlaneWidget->SetRepresentationToOutline();   }
178                 if (_representation==1){ _vPlaneWidget->SetRepresentationToWireframe(); }
179                 if (_representation==2){ _vPlaneWidget->SetRepresentationToSurface();   }
180                 _vPlaneWidget->SetPlaceFactor(1); //defini zoom initial
181                 _vPlaneWidget->SetHandleSize(0.01); 
182                 _vPlaneWidget->On();
183                 _vPlaneWidget->Print(std::cout);
184                 if (_origin.size()==3)
185                 {
186                         _vPlaneWidget->SetCenter( _origin[0] , _origin[1] , _origin[2] );
187                 } // if _origin
188                 if (_firsttime==true )  
189                 { 
190                         _firsttime = false;
191                         _vPlaneWidget->PlaceWidget();
192                         creaVtkCallbackPlaneWidget *creavtkcallbackplanewidget  = creaVtkCallbackPlaneWidget::New();
193                         creavtkcallbackplanewidget->creavtkplanewidget                  = this ;
194                         _vPlaneWidget->AddObserver( vtkCommand::InteractionEvent , creavtkcallbackplanewidget );
195                         _vPlaneWidget->AddObserver( vtkCommand::StartInteractionEvent , creavtkcallbackplanewidget );
196                         _vPlaneWidget->AddObserver( vtkCommand::EnableEvent , creavtkcallbackplanewidget );
197                 }
198                 UpdatePlane();
199     } else {
200                 _vPlaneWidget->Off();
201     } // if Active Render
202 }
203
204
205
206
207 //------------------------------------------------------------------------
208 void creaVtkPlaneWidget::UpdatePlane()
209 {
210         double p0[3];
211         double p1[3];
212         double p2[3];
213         double n[3];
214         double c[3];
215         _vPlaneWidget->GetOrigin(p0);
216         _vPlaneWidget->GetCenter(c); //These is from Execute Method
217         _vPlaneWidget->GetNormal(n);
218         _vPlaneWidget->GetPoint1(p1);
219         _vPlaneWidget->GetPoint2(p2);
220         
221         _vPlaneSource->SetResolution( GetResolution(),  GetResolution() );
222         _vPlaneSource->SetOrigin( p0 );
223         _vPlaneSource->SetPoint1( p1 );
224         _vPlaneSource->SetPoint2( p2 );
225         _vPlaneSource->Update( );
226         _vPlaneSource->SetNormal( n[ 0 ], n[ 1 ], n[ 2 ] );
227         _vPlaneSource->Update( );
228         _vPlaneSource->SetCenter( c );
229         _vPlaneSource->Update( );
230 }       
231
232 //------------------------------------------------------------------------
233 void creaVtkPlaneWidget::Execute()  // virutal
234 {
235         printf("EED creaVtkPlaneWidget::Execute (virtual )\n");
236 }
237
238