]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/manualContour/manualViewRoi.cpp
1eb8d06da4f695dde1c27af09d2a5e4fa4f03a10
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / manualContour / manualViewRoi.cpp
1 /*# ---------------------------------------------------------------------
2 #
3 # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image
4 #                        pour la Sant�)
5 # Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
6 # Previous Authors : Laurent Guigues, Jean-Pierre Roux
7 # CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil
8 #
9 #  This software is governed by the CeCILL-B license under French law and
10 #  abiding by the rules of distribution of free software. You can  use,
11 #  modify and/ or redistribute the software under the terms of the CeCILL-B
12 #  license as circulated by CEA, CNRS and INRIA at the following URL
13 #  http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
14 #  or in the file LICENSE.txt.
15 #
16 #  As a counterpart to the access to the source code and  rights to copy,
17 #  modify and redistribute granted by the license, users are provided only
18 #  with a limited warranty  and the software's author,  the holder of the
19 #  economic rights,  and the successive licensors  have only  limited
20 #  liability.
21 #
22 #  The fact that you are presently reading this means that you have had
23 #  knowledge of the CeCILL-B license and that you accept its terms.
24 # ------------------------------------------------------------------------ */
25
26 #include "manualViewRoi.h"
27
28 // ----------------------------------------------------------------------------
29 // ----------------------------------------------------------------------------
30 // ----------------------------------------------------------------------------
31
32 manualViewRoi::manualViewRoi()
33 {
34         _sizePointsContour=5;
35 }
36 // ----------------------------------------------------------------------------
37 manualViewRoi::~manualViewRoi()
38 {
39 }
40
41
42 // ----------------------------------------------------------------------------
43 manualViewRoi * manualViewRoi :: Clone()
44 {
45         manualViewRoi * clone = new manualViewRoi();
46         CopyAttributesTo(clone);
47         return clone;
48 }
49
50 // ---------------------------------------------------------------------------
51
52 void manualViewRoi::CopyAttributesTo( manualViewRoi * cloneObject)
53 {
54         // Fathers object
55         manualViewBaseContour::CopyAttributesTo(cloneObject);
56 }
57
58 // ----------------------------------------------------------------------------
59 void manualViewRoi::RefreshContour() // virtual
60 {
61     unsigned int i,ii, np;
62     np  = GetNumberOfPoints( );
63 //EED01 
64         if ( np > 0)
65         {
66                 if (np>=2)
67                 {
68                         manualPoint     *mp;
69                         for( i = 0; i < np+1; i++ ) {
70                                 ii=i%np;
71                                 mp = _manContModel->GetManualPoint(ii);
72
73         //EEDx6
74                                 double XX=mp->GetX(),YY=mp->GetY(),ZZ=mp->GetZ();
75         //                      wxVtk2DBaseView *wxvtk2Dbasevie = (wxVtk2DBaseView*)this->GetWxVtkBaseView();
76         //                      wxvtk2Dbasevie->TransformCoordinate_spacing_ModelToView(XX,YY,ZZ);
77
78         //EED 27 sep 2007
79         //                      _pts->SetPoint(i, XX,YY,ZZ );
80                                 _pts->SetPoint(i, XX*_spc[0] , YY*_spc[1] , ZZ*_spc[2] );
81                         } //  rof
82
83                 } else {
84                                 _pts->SetPoint(0, 0 , 0 , 0);
85                                 _pts->SetPoint(1, 0 , 0 , 0);
86                 } // if
87         }
88
89 //EED 2017-03-02
90         _pts->Modified();
91
92 }
93
94 // ----------------------------------------------------------------------------
95 int manualViewRoi::GetType() // virtual
96 {
97         return 2;
98 }
99
100 // ----------------------------------------------------------------------------
101
102 void manualViewRoi::GetMinMax(double &minX,double &minY, double &maxX, double &maxY)
103 {
104         double  pp[3];
105         manualPoint *mp;
106     unsigned int i;
107
108         minX=99999;
109         minY=99999;
110         maxX=-99999;
111         maxY=-99999;
112
113         unsigned int size=(unsigned int) _manContModel->GetSizeLstPoints();
114
115         for( i = 0; i < size; i++ )
116         {
117
118                 mp=_manContModel->GetManualPoint(i);
119                 pp[0]=mp->GetX();
120                 pp[1]=mp->GetY();
121
122                 // min X
123                 if (pp[0]<minX)
124                 {
125                         minX=pp[0];
126                 }
127                 //min Y
128                 if (pp[1]<minY)
129                 {
130                         minY=pp[1];
131                 }
132                 //max X
133                 if (pp[0]>maxX)
134                 {
135                         maxX=pp[0];
136                 }
137                 // max Y
138                 if (pp[1]>maxY)
139                 {
140                         maxY=pp[1];
141                 }
142         }
143
144         if ( size<1 )
145         {
146                 minX=0;
147                 maxX=0;
148                 minY=0;
149                 maxY=0;
150         }
151 }
152
153 // ----------------------------------------------------------------------------
154
155
156 bool manualViewRoi::ifTouchContour(int x,int y, int z) // virtual
157 {
158         bool    result=false;
159         double  px1=99999,py1=99999,px2=-99999,py2=-99999;
160
161         GetMinMax(px1,py1, px2, py2);
162
163         double xx=x;
164         double yy=y;
165         double zz=z;
166         TransfromCoordViewWorld(xx,yy,zz);
167
168         bool ok1=false;
169         bool ok2=false;
170         double ddx=GetRange();
171         double ddy=GetRange();
172
173         if ((xx>px1-ddx)&&(xx<px2+ddx) &&  (yy>py1-ddy)&&(yy<py2+ddy))
174         {
175                 ok1=true;
176         }
177
178         if ((xx>px1+ddx)&&(xx<px2-ddx) &&  (yy>py1+ddy)&&(yy<py2-ddy))
179         {
180                 ok2=true;
181         }
182
183         if ((ok1==true) && (ok2==false))
184         {
185                 result=true;
186         }
187                 
188         return result;
189 }
190
191 // ----------------------------------------------------------------------------
192
193 void manualViewRoi::InitMove(int x, int y, int z)  // virtual
194 {
195         manualPoint *mp;
196         double XX=x;
197         double YY=y;
198         double ZZ=z;
199         TransfromCoordViewWorld(XX,YY,ZZ);
200
201         if (_manContModel->GetSizeLstPoints()==4){
202                 mp = _manContModel->GetManualPoint(0);
203                 _dp0[0]= mp->GetX() - XX;
204                 _dp0[1]= mp->GetY() - YY;
205                 _dp0[2]= mp->GetZ();
206
207                 mp = _manContModel->GetManualPoint(1);
208                 _dp1[0]= mp->GetX() - XX;
209                 _dp1[1]= mp->GetY() - YY;
210                 _dp1[2]= mp->GetZ();
211
212                 mp = _manContModel->GetManualPoint(2);
213                 _dp2[0]= mp->GetX() - XX;
214                 _dp2[1]= mp->GetY() - YY;
215                 _dp2[2]= mp->GetZ();
216
217                 mp = _manContModel->GetManualPoint(3);
218                 _dp3[0]= mp->GetX() - XX;
219                 _dp3[1]= mp->GetY() - YY;
220                 _dp3[2]= mp->GetZ();
221         }
222 }
223
224 // ----------------------------------------------------------------------------
225
226 void manualViewRoi::MoveContour(int x, int y, int z) // virtual
227 {
228         manualPoint *mp;
229         double XX=x;
230         double YY=y;
231         double ZZ=z;
232         TransfromCoordViewWorld(XX,YY,ZZ);
233
234         mp = _manContModel->GetManualPoint(0);
235         mp->SetPoint(_dp0[0]+XX,_dp0[1]+YY,_dp0[2]);
236
237         mp = _manContModel->GetManualPoint(1);
238         mp->SetPoint(_dp1[0]+XX,_dp1[1]+YY,_dp0[2]);
239
240         mp = _manContModel->GetManualPoint(2);
241         mp->SetPoint(_dp2[0]+XX,_dp2[1]+YY,_dp0[2]);
242
243         mp = _manContModel->GetManualPoint(3);
244         mp->SetPoint(_dp3[0]+XX,_dp3[1]+YY,_dp0[2]);
245
246         UpdateViewPoint(0);
247         UpdateViewPoint(1);
248         UpdateViewPoint(2);
249         UpdateViewPoint(3);
250
251 }