]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/manualContour/manualViewRoi.cpp
570a372267537323075d52b518befe10a4e5e1c6
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / manualContour / manualViewRoi.cpp
1 #include "manualViewRoi.h"
2
3 // ----------------------------------------------------------------------------
4 // ----------------------------------------------------------------------------
5 // ----------------------------------------------------------------------------
6
7 manualViewRoi::manualViewRoi()
8 {
9         _sizePointsContour=5;
10 }
11 // ----------------------------------------------------------------------------
12 manualViewRoi::~manualViewRoi()
13 {
14 }
15
16
17 // ----------------------------------------------------------------------------
18 manualViewRoi * manualViewRoi :: Clone()
19 {
20         manualViewRoi * clone = new manualViewRoi();
21         CopyAttributesTo(clone);
22         return clone;
23 }
24
25 // ---------------------------------------------------------------------------
26
27 void manualViewRoi::CopyAttributesTo( manualViewRoi * cloneObject)
28 {
29         // Fathers object
30         manualViewBaseContour::CopyAttributesTo(cloneObject);
31 }
32
33 // ----------------------------------------------------------------------------
34 void manualViewRoi::RefreshContour() // virtual
35 {
36     unsigned int i,ii, np;
37     np  = GetNumberOfPoints( );
38 //EED01 
39         if ( np > 0)
40         {
41                 if (np>=2)
42                 {
43                         manualPoint     *mp;
44                         for( i = 0; i < np+1; i++ ) {
45                                 ii=i%np;
46                                 mp = _manContModel->GetManualPoint(ii);
47
48         //EEDx6
49                                 double XX=mp->GetX(),YY=mp->GetY(),ZZ=mp->GetZ();
50         //                      wxVtk2DBaseView *wxvtk2Dbasevie = (wxVtk2DBaseView*)this->GetWxVtkBaseView();
51         //                      wxvtk2Dbasevie->TransformCoordinate_spacing_ModelToView(XX,YY,ZZ);
52
53         //EED 27 sep 2007
54         //                      _pts->SetPoint(i, XX,YY,ZZ );
55                                 _pts->SetPoint(i, XX*_spc[0] , YY*_spc[1] , ZZ*_spc[2] );
56                         } //  rof
57
58                 } else {
59                                 _pts->SetPoint(0, 0 , 0 , 0);
60                                 _pts->SetPoint(1, 0 , 0 , 0);
61                 } // if
62         }
63 }
64
65 // ----------------------------------------------------------------------------
66 int manualViewRoi::GetType() // virtual
67 {
68         return 2;
69 }
70
71 // ----------------------------------------------------------------------------
72
73 void manualViewRoi::GetMinMax(double &minX,double &minY, double &maxX, double &maxY)
74 {
75         double  pp[3];
76         manualPoint *mp;
77     unsigned int i;
78
79         minX=99999;
80         minY=99999;
81         maxX=-99999;
82         maxY=-99999;
83
84         unsigned int size=(unsigned int) _manContModel->GetSizeLstPoints();
85
86         for( i = 0; i < size; i++ )
87         {
88
89                 mp=_manContModel->GetManualPoint(i);
90                 pp[0]=mp->GetX();
91                 pp[1]=mp->GetY();
92
93                 // min X
94                 if (pp[0]<minX)
95                 {
96                         minX=pp[0];
97                 }
98                 //min Y
99                 if (pp[1]<minY)
100                 {
101                         minY=pp[1];
102                 }
103                 //max X
104                 if (pp[0]>maxX)
105                 {
106                         maxX=pp[0];
107                 }
108                 // max Y
109                 if (pp[1]>maxY)
110                 {
111                         maxY=pp[1];
112                 }
113         }
114
115         if ( size<1 )
116         {
117                 minX=0;
118                 maxX=0;
119                 minY=0;
120                 maxY=0;
121         }
122 }
123
124 // ----------------------------------------------------------------------------
125
126
127 bool manualViewRoi::ifTouchContour(int x,int y, int z) // virtual
128 {
129         bool    result=false;
130         double  px1=99999,py1=99999,px2=-99999,py2=-99999;
131
132         GetMinMax(px1,py1, px2, py2);
133
134         double xx=x;
135         double yy=y;
136         double zz=z;
137         TransfromCoordViewWorld(xx,yy,zz);
138
139         bool ok1=false;
140         bool ok2=false;
141         double ddx=GetRange();
142         double ddy=GetRange();
143
144         if ((xx>px1-ddx)&&(xx<px2+ddx) &&  (yy>py1-ddy)&&(yy<py2+ddy))
145         {
146                 ok1=true;
147         }
148
149         if ((xx>px1+ddx)&&(xx<px2-ddx) &&  (yy>py1+ddy)&&(yy<py2-ddy))
150         {
151                 ok2=true;
152         }
153
154         if ((ok1==true) && (ok2==false))
155         {
156                 result=true;
157         }
158                 
159         return result;
160 }
161
162 // ----------------------------------------------------------------------------
163
164 void manualViewRoi::InitMove(int x, int y, int z)  // virtual
165 {
166         manualPoint *mp;
167         double XX=x;
168         double YY=y;
169         double ZZ=z;
170         TransfromCoordViewWorld(XX,YY,ZZ);
171
172         if (_manContModel->GetSizeLstPoints()==4){
173                 mp = _manContModel->GetManualPoint(0);
174                 _dp0[0]= mp->GetX() - XX;
175                 _dp0[1]= mp->GetY() - YY;
176                 _dp0[2]= mp->GetZ();
177
178                 mp = _manContModel->GetManualPoint(1);
179                 _dp1[0]= mp->GetX() - XX;
180                 _dp1[1]= mp->GetY() - YY;
181                 _dp1[2]= mp->GetZ();
182
183                 mp = _manContModel->GetManualPoint(2);
184                 _dp2[0]= mp->GetX() - XX;
185                 _dp2[1]= mp->GetY() - YY;
186                 _dp2[2]= mp->GetZ();
187
188                 mp = _manContModel->GetManualPoint(3);
189                 _dp3[0]= mp->GetX() - XX;
190                 _dp3[1]= mp->GetY() - YY;
191                 _dp3[2]= mp->GetZ();
192         }
193 }
194
195 // ----------------------------------------------------------------------------
196
197 void manualViewRoi::MoveContour(int x, int y, int z) // virtual
198 {
199         manualPoint *mp;
200         double XX=x;
201         double YY=y;
202         double ZZ=z;
203         TransfromCoordViewWorld(XX,YY,ZZ);
204
205         mp = _manContModel->GetManualPoint(0);
206         mp->SetPoint(_dp0[0]+XX,_dp0[1]+YY,_dp0[2]);
207
208         mp = _manContModel->GetManualPoint(1);
209         mp->SetPoint(_dp1[0]+XX,_dp1[1]+YY,_dp0[2]);
210
211         mp = _manContModel->GetManualPoint(2);
212         mp->SetPoint(_dp2[0]+XX,_dp2[1]+YY,_dp0[2]);
213
214         mp = _manContModel->GetManualPoint(3);
215         mp->SetPoint(_dp3[0]+XX,_dp3[1]+YY,_dp0[2]);
216
217         UpdateViewPoint(0);
218         UpdateViewPoint(1);
219         UpdateViewPoint(2);
220         UpdateViewPoint(3);
221
222 }