]> Creatis software - creaVtk.git/blob - lib/creaVtk/creaVtkPlaneWidget.cpp
76af319eed93e38ad28984905625250d0e3d5413
[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         _vPlaneWidget   = vtkPlaneWidget::New();
53         _vPlaneSource   = vtkPlaneSource::New();
54 }
55
56 //------------------------------------------------------------------------
57 creaVtkPlaneWidget::~creaVtkPlaneWidget()
58 {
59         _vPlaneWidget->Delete();
60 }
61
62 //------------------------------------------------------------------------
63 void creaVtkPlaneWidget::SetImage(vtkImageData* image)
64 {
65         _image = image;
66 }
67
68 //------------------------------------------------------------------------
69 vtkImageData* creaVtkPlaneWidget::GetImage()
70 {
71         return _image;
72 }
73
74 //------------------------------------------------------------------------
75 void creaVtkPlaneWidget::SetActive(bool active)
76 {
77         _active = active;
78 }
79
80 //------------------------------------------------------------------------
81 bool creaVtkPlaneWidget::GetActive()
82 {
83         return _active;
84 }
85
86 //------------------------------------------------------------------------
87 void creaVtkPlaneWidget::SetRenderer(vtkRenderer* renderer)
88 {
89         _renderer = renderer;
90 }
91
92 //------------------------------------------------------------------------
93 vtkRenderer* creaVtkPlaneWidget::GetRenderer()
94 {
95         return _renderer;
96 }
97
98 //------------------------------------------------------------------------
99 vtkPlaneSource* creaVtkPlaneWidget::GetPlaneSource()
100 {
101         return _vPlaneSource;
102 }
103
104 //------------------------------------------------------------------------
105 void creaVtkPlaneWidget::SetResolution(int resolution)
106 {
107         _resolution = resolution;
108 }
109
110 //------------------------------------------------------------------------
111 int creaVtkPlaneWidget::GetResolution()
112 {
113         return _resolution;
114 }
115
116
117
118 //------------------------------------------------------------------------
119 std::vector<double> creaVtkPlaneWidget::GetCenter()
120 {
121         std::vector<double> vecCenter;
122         double point[3];
123         _vPlaneWidget->GetCenter(point);
124         vecCenter.push_back(point[0]);
125         vecCenter.push_back(point[1]);
126         vecCenter.push_back(point[2]);
127         return vecCenter;
128 }
129
130 //------------------------------------------------------------------------
131 std::vector<double> creaVtkPlaneWidget::GetNormal()
132 {
133         std::vector<double> vecNormal;
134         double point[3];
135         _vPlaneWidget->GetNormal(point);
136         vecNormal.push_back(point[0]);
137         vecNormal.push_back(point[1]);
138         vecNormal.push_back(point[2]);
139         return vecNormal;
140 }
141
142
143 //------------------------------------------------------------------------
144 void creaVtkPlaneWidget::Process()
145 {    
146     if ((GetActive()==true) && (GetRenderer()!=NULL))
147     { 
148
149 //EED 2017-01-01 Migration VTK7
150 #if VTK_MAJOR_VERSION <= 5
151         _vPlaneWidget->SetInput( GetImage() );
152 #else
153         _vPlaneWidget->SetInputData( GetImage() );
154 #endif
155
156         _vPlaneWidget->SetInteractor( GetRenderer()->GetRenderWindow()->GetInteractor() );
157         _vPlaneWidget->NormalToXAxisOn();
158         _vPlaneWidget->NormalToZAxisOn();
159         _vPlaneWidget->SetResolution(10);
160         _vPlaneWidget->SetRepresentationToOutline();
161         _vPlaneWidget->SetPlaceFactor(1); //defini zoom initial
162         _vPlaneWidget->On();
163         if (_firsttime==true )  
164         { 
165                 _firsttime = false;
166                 _vPlaneWidget->PlaceWidget();
167                 creaVtkCallbackPlaneWidget *creavtkcallbackplanewidget = creaVtkCallbackPlaneWidget::New();
168                 creavtkcallbackplanewidget->creavtkplanewidget   = this ;
169                 _vPlaneWidget->AddObserver( vtkCommand::InteractionEvent , creavtkcallbackplanewidget );
170                 _vPlaneWidget->AddObserver( vtkCommand::StartInteractionEvent , creavtkcallbackplanewidget );
171                 _vPlaneWidget->AddObserver( vtkCommand::EnableEvent , creavtkcallbackplanewidget );
172         }
173         UpdatePlane();
174     } else {
175         _vPlaneWidget->Off();
176     }
177 }
178
179
180
181
182 //------------------------------------------------------------------------
183 void creaVtkPlaneWidget::UpdatePlane()
184 {
185         double p0[3];
186         double p1[3];
187         double p2[3];
188         double n[3];
189         double c[3];
190         _vPlaneWidget->GetOrigin(p0);
191         _vPlaneWidget->GetCenter(c); //These is from Execute Method
192         _vPlaneWidget->GetNormal(n);
193         _vPlaneWidget->GetPoint1(p1);
194         _vPlaneWidget->GetPoint2(p2);
195         
196         _vPlaneSource->SetResolution( GetResolution(),  GetResolution() );
197         _vPlaneSource->SetOrigin( p0 );
198         _vPlaneSource->SetPoint1( p1 );
199         _vPlaneSource->SetPoint2( p2 );
200         _vPlaneSource->Update( );
201         _vPlaneSource->SetNormal( n[ 0 ], n[ 1 ], n[ 2 ] );
202         _vPlaneSource->Update( );
203         _vPlaneSource->SetCenter( c );
204         _vPlaneSource->Update( );
205 }       
206
207 //------------------------------------------------------------------------
208 void creaVtkPlaneWidget::Execute()  // virutal
209 {
210         printf("EED creaVtkPlaneWidget::Execute (virtual )\n");
211 }
212
213