]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/manualContour/manualViewContour.cpp
*** empty log message ***
[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                         if (_id_viewPoint_for_text>=size) 
163                         {
164                                 _id_viewPoint_for_text=0;
165                         }
166                         
167                         double px = _manContModel->GetManualPoint(_id_viewPoint_for_text)->GetX();
168                         double py = _manContModel->GetManualPoint(_id_viewPoint_for_text)->GetY();
169
170                         //EED 27 sep 2006
171                         px=px*_spc[0];
172                         py=py*_spc[1];
173
174                         _textActor->SetPosition(px+GetRange()+1,py);
175                 }
176
177         }
178 }
179
180 // ----------------------------------------------------------------------------
181 bool manualViewContour::ifTouchContour(int x,int y,int z){
182         bool result=false;
183         double xx=x;
184         double yy=y;
185         double zz=z;
186         double ppA[3];
187         double ppB[3];
188         double d1,d2,d3;
189         TransfromCoordViewWorld(xx,yy,zz);
190
191 //EED 27 sep 2006
192         xx = xx * _spc[0];
193         yy = yy * _spc[1];
194         zz = zz * _spc[2];
195
196     unsigned int i, nps,nps_t;
197     nps   = _sizePointsContour;
198         
199         if (this->_manContModel->IfCloseContour()==true)
200         {
201                 nps_t = nps;
202         } else {
203                 nps_t = nps-1;
204         }
205
206         
207         for( i = 0; i < nps_t; i++ ) 
208         {
209                 _pts->GetPoint(i%nps, ppA);
210                 _pts->GetPoint((i+1)%nps, ppB);
211                 d1= sqrt( (ppA[0]-xx)*(ppA[0]-xx) + (ppA[1]-yy)*(ppA[1]-yy) + (ppA[2]-zz)*(ppA[2]-zz));
212                 d2= sqrt( (ppB[0]-xx)*(ppB[0]-xx) + (ppB[1]-yy)*(ppB[1]-yy) + (ppB[2]-zz)*(ppB[2]-zz));
213                 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]));
214
215
216                 if (  ((d1+d2)>=d3) &&  ((d1+d2)<=d3*1.3) ) 
217                 {
218                         result=true;
219                         i=nps;
220                 }
221         }
222         
223         return result;
224 }
225
226 // ----------------------------------------------------------------------------
227 void manualViewContour::DeletePoint(int id) // virtual
228 {
229         if (_lstViewPoints.size()>2)
230         {
231                 manualViewBaseContour::DeletePoint( id );
232         }
233 }
234 // ----------------------------------------------------------------------------
235
236 void manualViewContour::ClearPoint(int id)
237 {
238         manualViewBaseContour::DeletePoint( id );
239 }
240
241 //-------------------------------------------------------------------
242 void manualViewContour::SetMesureScale(double mesureScale)
243 {
244         _mesureScale = mesureScale;
245 }
246 //-------------------------------------------------------------------
247 void manualViewContour::InitMove(int x, int y, int z)
248 {
249         _initialConoturModel->DeleteAllPoints();
250
251         manualPoint *mp = NULL;
252         double XX=x;
253         double YY=y;
254         double ZZ=z;
255         TransfromCoordViewWorld(XX,YY,ZZ);
256
257         int i, manualPointsSZ = _manContModel->GetSizeLstPoints();
258         for ( i=0; i<manualPointsSZ; i++ )
259         {
260                 mp = _manContModel->GetManualPoint( i );
261                 this->_initialConoturModel->AddPoint( mp->GetX() - XX, mp->GetY() - YY, mp->GetZ() );
262         }
263 }
264 //-------------------------------------------------------------------
265 void manualViewContour::MoveContour(int x, int y, int z)
266 {
267         manualPoint *mpOrigin = NULL;
268         manualPoint *mpMoving = NULL;
269         double XX=x;
270         double YY=y;
271         double ZZ=z;
272
273         TransfromCoordViewWorld(XX,YY,ZZ);
274
275         int i, manualPointsSZ = _manContModel->GetSizeLstPoints();
276         for ( i=0; i<manualPointsSZ; i++ )
277         {
278                 mpOrigin = _manContModel->GetManualPoint( i );
279                 mpMoving = _initialConoturModel->GetManualPoint(i);
280                 mpOrigin->SetPoint( mpMoving->GetX()+XX, mpMoving->GetY() + YY, mpMoving->GetZ() );
281         }
282         UpdateViewPoints();
283 }
284 void manualViewContour::MoveContour(int horizontalUnits, int verticalUnits )
285 {
286         manualPoint *mpOrigin = NULL;
287
288         int i, manualPointsSZ = _manContModel->GetSizeLstPoints();
289         for ( i=0; i<manualPointsSZ; i++ )
290         {
291                 mpOrigin = _manContModel->GetManualPoint( i );
292                 mpOrigin->SetPoint( mpOrigin->GetX()+horizontalUnits, mpOrigin->GetY()+verticalUnits, mpOrigin->GetZ() );
293         }
294         UpdateViewPoints();
295 }