]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/manualContour/manualViewContour.cpp
7859143d17f4824c2514861c455a13db9c05c81c
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / manualContour / manualViewContour.cpp
1 #include "manualViewContour.h"
2
3 // ----------------------------------------------------------------------------
4 // ----------------------------------------------------------------------------
5 // ----------------------------------------------------------------------------
6
7 manualViewContour::manualViewContour()
8 {
9         _id_viewPoint_for_text  =       0;
10         _mesureScale                    =       1;
11         _initialConoturModel = new manualContourModel();
12 }
13 // ----------------------------------------------------------------------------
14 manualViewContour::~manualViewContour()
15 {
16         delete _initialConoturModel;
17 }
18 // ----------------------------------------------------------------------------
19
20 // ----------------------------------------------------------------------------
21 manualViewContour * manualViewContour :: Clone()
22 {
23         manualViewContour * clone = new manualViewContour();
24         CopyAttributesTo(clone);
25         return clone;
26 }
27
28 // ---------------------------------------------------------------------------
29
30 void manualViewContour::CopyAttributesTo( manualViewContour * cloneObject)
31 {
32         // Call to Fathers object
33         manualViewBaseContour::CopyAttributesTo(cloneObject);
34
35         cloneObject->SetMesureScale(_mesureScale);
36 }
37
38 // ---------------------------------------------------------------------------
39
40 int manualViewContour::GetType() // virtual
41 {
42         return 1;
43 }
44
45 // ----------------------------------------------------------------------------
46
47 void manualViewContour::Save(FILE *pFile)
48 {
49         manualViewBaseContour::Save(pFile);
50 }
51
52 // ----------------------------------------------------------------------------
53
54 void manualViewContour::Open(FILE *pFile)
55 {
56 }
57
58
59
60 // ----------------------------------------------------------------------------
61 void manualViewContour::RefreshContour() // virtual
62 {
63
64         int i,np,nps;
65
66 //JSTG 25-02-08 --------------------
67         //double t,delta, x,y,z;
68         double x,y,z;
69 //----------------------------------
70
71         _manContModel->UpdateSpline();
72     np  = GetNumberOfPoints( );
73         //nps = GetNumberOfPointsSpline();
74     nps = _manContModel->GetNumberOfPointsSpline();
75         //delta=( double ) ( np  ) / ( double ) ( nps-1  );             //JSTG 25-02-08
76
77
78         if ( _pts!=NULL )
79         {
80                 if (np>=2  )
81                 {
82                         for( i = 0; i < nps; i++ )
83                         {
84 //JSTG 25-02-08 ------------------------------------------------
85                                 //t = delta * (double)i;
86                                 //_manContModel->GetSplinePoint(t,x,y,z);
87                                 _manContModel->GetSpline_i_Point(i,&x,&y,&z);
88 //--------------------------------------------------------------
89         // EED 27 sep 2006
90         //                      _pts->SetPoint(i, x,y,z );
91                                 _pts->SetPoint(i , x*_spc[0] , y*_spc[1] , z*_spc[2] );
92
93
94                         }// for
95                 }
96                 else
97                 {
98                                 _pts->SetPoint(0, 0 , 0 , 0);
99                                 _pts->SetPoint(1, 0 , 0 , 0);
100                 } // if
101         }
102 }
103
104 // ----------------------------------------------------------------------------
105 void manualViewContour::RefreshText()  // virtual
106 {
107         if ((_textActor!=NULL) && ( _textActor->GetProperty()->GetOpacity()!=0 )){
108                 int size = GetNumberOfPoints();
109                 char text[50];
110                 char resultText[50];
111                 strcpy(resultText," ");
112
113 //CMRU 19-08-09 ----------------------------------
114                 std::string label;
115                 label = _manContModel->GetLabel();
116 // ------------------------------------
117
118                 if (size==2)
119                 {
120                         strcpy(resultText,"L= ");
121                         gcvt ( _mesureScale * this->_manContModel->GetPathSize() , 5, text );
122                         strcat(resultText,text);
123
124 //CMRU 19-08-09 ----------------------------------
125                         strcat(resultText," ");
126                         strcat(resultText,label.c_str());
127 //------------------------------------------------
128                 }
129                 if (size>2)
130                 {
131                         if (_manContModel->IfCloseContour()==true)
132                         {
133                                 strcpy(resultText,"P= ");
134                                 gcvt ( _mesureScale * this->_manContModel->GetPathSize() , 5, text );
135                                 strcat(resultText,text);
136                                 gcvt ( _mesureScale * _mesureScale * this->_manContModel->GetPathArea() , 5, text );
137                                 strcat(resultText,"   A= ");
138                                 strcat(resultText,text);
139                         } else {
140                                 strcpy(resultText,"L= ");
141                                 gcvt (  _mesureScale * this->_manContModel->GetPathSize() , 5, text );
142                                 strcat(resultText,text);
143                         }
144 //CMRU 19-08-09 ----------------------------------
145                         strcat(resultText,label.c_str());
146 //------------------------------------------------
147                 }
148
149                 _textActor->SetInput(resultText);
150                 
151                 if (size>=1){
152
153                         int i;
154                         for (i=0; i<size; i++)
155                         {
156                                 if (_lstViewPoints[i]->GetPosibleSelected()==true)
157                                 {
158                                         _id_viewPoint_for_text = i;
159                                 }
160                         }
161
162                         int id = _id_viewPoint_for_text;
163                         double px = _manContModel->GetManualPoint(id)->GetX();
164                         double py = _manContModel->GetManualPoint(id)->GetY();
165
166                         //EED 27 sep 2006
167                         px=px*_spc[0];
168                         py=py*_spc[1];
169
170                         _textActor->SetPosition(px+GetRange()+1,py);
171                 }
172
173         }
174 }
175
176 // ----------------------------------------------------------------------------
177 bool manualViewContour::ifTouchContour(int x,int y,int z){
178         bool result=false;
179         double xx=x;
180         double yy=y;
181         double zz=z;
182         double ppA[3];
183         double ppB[3];
184         double d1,d2,d3;
185         TransfromCoordViewWorld(xx,yy,zz);
186
187 //EED 27 sep 2006
188         xx = xx * _spc[0];
189         yy = yy * _spc[1];
190         zz = zz * _spc[2];
191
192     unsigned int i, nps,nps_t;
193     nps   = _sizePointsContour;
194         
195         if (this->_manContModel->IfCloseContour()==true)
196         {
197                 nps_t = nps;
198         } else {
199                 nps_t = nps-1;
200         }
201
202         
203         for( i = 0; i < nps_t; i++ ) 
204         {
205                 _pts->GetPoint(i%nps, ppA);
206                 _pts->GetPoint((i+1)%nps, ppB);
207                 d1= sqrt( (ppA[0]-xx)*(ppA[0]-xx) + (ppA[1]-yy)*(ppA[1]-yy) + (ppA[2]-zz)*(ppA[2]-zz));
208                 d2= sqrt( (ppB[0]-xx)*(ppB[0]-xx) + (ppB[1]-yy)*(ppB[1]-yy) + (ppB[2]-zz)*(ppB[2]-zz));
209                 d3= sqrt( (ppB[0]-ppA[0])*(ppB[0]-ppA[0]) + (ppB[1]-ppA[1])*(ppB[1]-ppA[1]) + (ppB[2]-ppA[2])*(ppB[2]-ppA[2]));
210
211
212                 if (  ((d1+d2)>=d3) &&  ((d1+d2)<=d3*1.3) ) 
213                 {
214                         result=true;
215                         i=nps;
216                 }
217         }
218         
219         return result;
220 }
221
222 // ----------------------------------------------------------------------------
223 void manualViewContour::DeletePoint(int id) // virtual
224 {
225         if (_lstViewPoints.size()>2)
226         {
227                 manualViewBaseContour::DeletePoint( id );
228         }
229 }
230 // ----------------------------------------------------------------------------
231
232 void manualViewContour::ClearPoint(int id)
233 {
234         manualViewBaseContour::DeletePoint( id );
235 }
236
237 //-------------------------------------------------------------------
238 void manualViewContour::SetMesureScale(double mesureScale)
239 {
240         _mesureScale = mesureScale;
241 }
242 //-------------------------------------------------------------------
243 void manualViewContour::InitMove(int x, int y, int z)
244 {
245         _initialConoturModel->DeleteAllPoints();
246
247         manualPoint *mp = NULL;
248         double XX=x;
249         double YY=y;
250         double ZZ=z;
251         TransfromCoordViewWorld(XX,YY,ZZ);
252
253         int i, manualPointsSZ = _manContModel->GetSizeLstPoints();
254         for ( i=0; i<manualPointsSZ; i++ )
255         {
256                 mp = _manContModel->GetManualPoint( i );
257                 this->_initialConoturModel->AddPoint( mp->GetX() - XX, mp->GetY() - YY, mp->GetZ() );
258         }
259 }
260 //-------------------------------------------------------------------
261 void manualViewContour::MoveContour(int x, int y, int z)
262 {
263         manualPoint *mpOrigin = NULL;
264         manualPoint *mpMoving = NULL;
265         double XX=x;
266         double YY=y;
267         double ZZ=z;
268
269         TransfromCoordViewWorld(XX,YY,ZZ);
270
271         int i, manualPointsSZ = _manContModel->GetSizeLstPoints();
272         for ( i=0; i<manualPointsSZ; i++ )
273         {
274                 mpOrigin = _manContModel->GetManualPoint( i );
275                 mpMoving = _initialConoturModel->GetManualPoint(i);
276                 mpOrigin->SetPoint( mpMoving->GetX()+XX, mpMoving->GetY() + YY, mpMoving->GetZ() );
277         }
278         UpdateViewPoints();
279 }
280 void manualViewContour::MoveContour(int horizontalUnits, int verticalUnits )
281 {
282         manualPoint *mpOrigin = NULL;
283
284         int i, manualPointsSZ = _manContModel->GetSizeLstPoints();
285         for ( i=0; i<manualPointsSZ; i++ )
286         {
287                 mpOrigin = _manContModel->GetManualPoint( i );
288                 mpOrigin->SetPoint( mpOrigin->GetX()+horizontalUnits, mpOrigin->GetY()+verticalUnits, mpOrigin->GetZ() );
289         }
290         UpdateViewPoints();
291 }