]> Creatis software - creaVtk.git/blob - lib/creaVtk/creaVtkPlaneWidget.cpp
0cb5eea303d3985e2d2e5ec43c587b0de07d91b0
[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         _vPlaneWidget->SetInput( GetImage() );
149         _vPlaneWidget->SetInteractor( GetRenderer()->GetRenderWindow()->GetInteractor() );
150         _vPlaneWidget->NormalToXAxisOn();
151         _vPlaneWidget->NormalToZAxisOn();
152         _vPlaneWidget->SetResolution(10);
153         _vPlaneWidget->SetRepresentationToOutline();
154         _vPlaneWidget->SetPlaceFactor(1); //defini zoom initial
155         _vPlaneWidget->On();
156         if (_firsttime==true )  
157         { 
158                 _firsttime = false;
159                 _vPlaneWidget->PlaceWidget();
160                 creaVtkCallbackPlaneWidget *creavtkcallbackplanewidget = creaVtkCallbackPlaneWidget::New();
161                 creavtkcallbackplanewidget->creavtkplanewidget   = this ;
162                 _vPlaneWidget->AddObserver( vtkCommand::InteractionEvent , creavtkcallbackplanewidget );
163                 _vPlaneWidget->AddObserver( vtkCommand::StartInteractionEvent , creavtkcallbackplanewidget );
164                 _vPlaneWidget->AddObserver( vtkCommand::EnableEvent , creavtkcallbackplanewidget );
165         }
166         UpdatePlane();
167     } else {
168         _vPlaneWidget->Off();
169     }
170 }
171
172
173
174
175 //------------------------------------------------------------------------
176 void creaVtkPlaneWidget::UpdatePlane()
177 {
178         double p0[3];
179         double p1[3];
180         double p2[3];
181         double n[3];
182         double c[3];
183         _vPlaneWidget->GetOrigin(p0);
184         _vPlaneWidget->GetCenter(c); //These is from Execute Method
185         _vPlaneWidget->GetNormal(n);
186         _vPlaneWidget->GetPoint1(p1);
187         _vPlaneWidget->GetPoint2(p2);
188         
189         _vPlaneSource->SetResolution( GetResolution(),  GetResolution() );
190         _vPlaneSource->SetOrigin( p0 );
191         _vPlaneSource->SetPoint1( p1 );
192         _vPlaneSource->SetPoint2( p2 );
193         _vPlaneSource->Update( );
194         _vPlaneSource->SetNormal( n[ 0 ], n[ 1 ], n[ 2 ] );
195         _vPlaneSource->Update( );
196         _vPlaneSource->SetCenter( c );
197         _vPlaneSource->Update( );
198 }       
199
200 //------------------------------------------------------------------------
201 void creaVtkPlaneWidget::Execute()  // virutal
202 {
203         printf("EED creaVtkPlaneWidget::Execute (virtual )\n");
204 }
205
206