0031035: Coding - uninitialized class fields reported by Visual Studio Code Analysis
[occt.git] / src / GeomAPI / GeomAPI_ProjectPointOnSurf.cxx
1 // Created on: 1994-03-17
2 // Created by: Bruno DUMORTIER
3 // Copyright (c) 1994-1999 Matra Datavision
4 // Copyright (c) 1999-2014 OPEN CASCADE SAS
5 //
6 // This file is part of Open CASCADE Technology software library.
7 //
8 // This library is free software; you can redistribute it and/or modify it under
9 // the terms of the GNU Lesser General Public License version 2.1 as published
10 // by the Free Software Foundation, with special exception defined in the file
11 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
12 // distribution for complete text of the license and disclaimer of any warranty.
13 //
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
16
17
18 #include <Extrema_ExtPS.hxx>
19 #include <Geom_Surface.hxx>
20 #include <GeomAdaptor_Surface.hxx>
21 #include <GeomAPI_ProjectPointOnSurf.hxx>
22 #include <gp_Pnt.hxx>
23 #include <Precision.hxx>
24 #include <Standard_OutOfRange.hxx>
25 #include <StdFail_NotDone.hxx>
26
27 //=======================================================================
28 //function : GeomAPI_ProjectPointOnSurf
29 //purpose  : 
30 //=======================================================================
31 GeomAPI_ProjectPointOnSurf::GeomAPI_ProjectPointOnSurf() 
32 : myIsDone (Standard_False),
33   myIndex(0) 
34 {
35 }
36
37
38 //=======================================================================
39 //function : GeomAPI_ProjectPointOnSurf
40 //purpose  : 
41 //=======================================================================
42   GeomAPI_ProjectPointOnSurf::GeomAPI_ProjectPointOnSurf (const gp_Pnt&               P, 
43                                                           const Handle(Geom_Surface)& Surface,
44                                                           const Extrema_ExtAlgo   theProjAlgo)
45
46   Init (P, Surface, theProjAlgo); 
47 }
48 //=======================================================================
49 //function : GeomAPI_ProjectPointOnSurf
50 //purpose  : 
51 //=======================================================================
52   GeomAPI_ProjectPointOnSurf::GeomAPI_ProjectPointOnSurf (const gp_Pnt&               P, 
53                                                           const Handle(Geom_Surface)& Surface,
54                                                           const Standard_Real         Tolerance,
55                                                           const Extrema_ExtAlgo       theProjAlgo)
56
57   Init (P, Surface, Tolerance, theProjAlgo); 
58 }
59 //=======================================================================
60 //function : GeomAPI_ProjectPointOnSurf
61 //purpose  : 
62 //=======================================================================
63   GeomAPI_ProjectPointOnSurf::GeomAPI_ProjectPointOnSurf(const gp_Pnt&               P, 
64                                                          const Handle(Geom_Surface)& Surface,
65                                                          const Standard_Real         Umin,
66                                                          const Standard_Real         Usup,
67                                                          const Standard_Real         Vmin,
68                                                          const Standard_Real         Vsup,
69                                                          const Extrema_ExtAlgo       theProjAlgo)
70
71
72   Init (P, Surface, Umin, Usup, Vmin, Vsup, theProjAlgo); 
73 }
74 //=======================================================================
75 //function : GeomAPI_ProjectPointOnSurf
76 //purpose  : 
77 //=======================================================================
78   GeomAPI_ProjectPointOnSurf::GeomAPI_ProjectPointOnSurf  (const gp_Pnt&               P, 
79                                                            const Handle(Geom_Surface)& Surface,
80                                                            const Standard_Real         Umin,
81                                                            const Standard_Real         Usup,
82                                                            const Standard_Real         Vmin,
83                                                            const Standard_Real         Vsup,
84                                                            const Standard_Real         Tolerance,
85                                                            const Extrema_ExtAlgo       theProjAlgo)
86
87
88   Init (P, Surface, Umin, Usup, Vmin, Vsup, Tolerance, theProjAlgo); 
89 }
90 //=======================================================================
91 //function : Init
92 //purpose  : 
93 //=======================================================================
94   void GeomAPI_ProjectPointOnSurf::Init ()
95 {
96   myIsDone = myExtPS.IsDone() && ( myExtPS.NbExt() > 0);
97
98   if ( myIsDone) {
99     // evaluate the lower distance and its index;
100     Standard_Real Dist2, Dist2Min = myExtPS.SquareDistance(1);
101     myIndex = 1;
102     
103     for ( Standard_Integer i = 2; i <= myExtPS.NbExt(); i++) {
104       Dist2 = myExtPS.SquareDistance(i);
105       if (Dist2 < Dist2Min) {
106         Dist2Min = Dist2;
107         myIndex = i;
108       }
109     }
110   }
111 }
112 //=======================================================================
113 //function : Init
114 //purpose  : 
115 //=======================================================================
116   void GeomAPI_ProjectPointOnSurf::Init (const gp_Pnt&               P,
117                                          const Handle(Geom_Surface)& Surface,
118                                          const Extrema_ExtAlgo   theProjAlgo)
119
120
121   Init (P, Surface, Precision::Confusion(), theProjAlgo); 
122 }
123 //=======================================================================
124 //function : Init
125 //purpose  : 
126 //=======================================================================
127   void GeomAPI_ProjectPointOnSurf::Init(const gp_Pnt&               P,
128                                         const Handle(Geom_Surface)& Surface,
129                                         const Standard_Real         Tolerance,
130                                         const Extrema_ExtAlgo       theProjAlgo)
131
132 {
133   //modified by NIZNHY-PKV Thu Apr  4 10:37:55 2002 f
134   //GeomAdaptor_Surface TheSurface (Surface);
135   //myExtPS = Extrema_ExtPS (P, TheSurface, Tolerance, Tolerance);
136   
137   //modified by NIZNHY-PKV Mon Apr  8 11:13:37 2002 f XXX
138   Standard_Real Umin, Usup, Vmin, Vsup;
139   Surface->Bounds(Umin, Usup, Vmin, Vsup);
140   myGeomAdaptor.Load(Surface, Umin, Usup, Vmin, Vsup);
141   //
142   //myExtPS = Extrema_ExtPS();
143   myExtPS.SetAlgo(theProjAlgo);
144   myExtPS.Initialize(myGeomAdaptor, Umin, Usup, Vmin, Vsup, Tolerance, Tolerance);
145   myExtPS.Perform(P);
146   //XXXmyExtPS = Extrema_ExtPS (P, myGeomAdaptor, Tolerance, Tolerance);
147   //modified by NIZNHY-PKV Mon Apr  8 11:13:44 2002 t XXX
148   
149   //modified by NIZNHY-PKV Thu Apr  4 10:37:58 2002 t
150   Init ();
151 }
152
153
154 //=======================================================================
155 //function : Init
156 //purpose  : 
157 //=======================================================================
158   void GeomAPI_ProjectPointOnSurf::Init (const gp_Pnt&               P,
159                                          const Handle(Geom_Surface)& Surface,
160                                          const Standard_Real         Umin,
161                                          const Standard_Real         Usup,
162                                          const Standard_Real         Vmin,
163                                          const Standard_Real         Vsup,
164                                          const Extrema_ExtAlgo       theProjAlgo)
165 {
166   Standard_Real Tolerance = Precision::PConfusion();
167   //modified by NIZNHY-PKV Thu Apr  4 10:38:23 2002 f
168   //GeomAdaptor_Surface TheSurface (Surface,Umin,Usup,Vmin,Vsup);
169   //myExtPS = Extrema_ExtPS (P, TheSurface, Tol, Tol);
170   myGeomAdaptor.Load(Surface, Umin,Usup,Vmin,Vsup);
171   //myExtPS = Extrema_ExtPS();
172   myExtPS.SetAlgo(theProjAlgo);
173   myExtPS.Initialize(myGeomAdaptor, Umin, Usup, Vmin, Vsup, Tolerance, Tolerance);
174   myExtPS.Perform(P);
175   //XXX myExtPS = Extrema_ExtPS (P, myGeomAdaptor, Tol, Tol);
176   //modified by NIZNHY-PKV Thu Apr  4 10:38:30 2002 t
177   Init ();
178 }
179
180 //=======================================================================
181 //function : Init
182 //purpose  : 
183 //=======================================================================
184   void GeomAPI_ProjectPointOnSurf::Init (const gp_Pnt&               P,
185                                          const Handle(Geom_Surface)& Surface,
186                                          const Standard_Real         Umin,
187                                          const Standard_Real         Usup,
188                                          const Standard_Real         Vmin,
189                                          const Standard_Real         Vsup,
190                                          const Standard_Real         Tolerance,
191                                          const Extrema_ExtAlgo       theProjAlgo)
192 {
193   //modified by NIZNHY-PKV Thu Apr  4 10:39:10 2002 f
194   //GeomAdaptor_Surface TheSurface (Surface,Umin,Usup,Vmin,Vsup);
195   //myExtPS = Extrema_ExtPS (P, TheSurface, Tolerance, Tolerance);
196   myGeomAdaptor.Load(Surface, Umin,Usup,Vmin,Vsup);
197   //myExtPS = Extrema_ExtPS();
198   myExtPS.SetAlgo(theProjAlgo);
199   myExtPS.Initialize(myGeomAdaptor, Umin, Usup, Vmin, Vsup, Tolerance, Tolerance);
200   myExtPS.Perform(P);
201   //XXX myExtPS = Extrema_ExtPS (P, myGeomAdaptor, Tolerance, Tolerance);
202   //modified by NIZNHY-PKV Thu Apr  4 10:39:14 2002 t
203   Init ();
204 }
205 //=======================================================================
206 //function : Init
207 //purpose  : 
208 //=======================================================================
209   void GeomAPI_ProjectPointOnSurf::Init (const Handle(Geom_Surface)& Surface,
210                                          const Standard_Real       Umin,
211                                          const Standard_Real       Usup,
212                                          const Standard_Real       Vmin,
213                                          const Standard_Real       Vsup,
214                                          const Extrema_ExtAlgo     theProjAlgo)
215 {
216   Standard_Real Tolerance = Precision::PConfusion();
217   //modified by NIZNHY-PKV Thu Apr  4 10:41:50 2002 f
218   //GeomAdaptor_Surface TheSurface (Surface,Umin,Usup,Vmin,Vsup);
219   myGeomAdaptor.Load(Surface, Umin,Usup,Vmin,Vsup);
220   //modified by NIZNHY-PKV Thu Apr  4 10:42:29 2002 t
221   //myExtPS = Extrema_ExtPS();
222   //modified by NIZNHY-PKV Thu Apr  4 10:42:32 2002 f
223   //myExtPS.Initialize(TheSurface, Umin, Usup, Vmin, Vsup, Tol, Tol);
224   myExtPS.SetAlgo(theProjAlgo);
225   myExtPS.Initialize(myGeomAdaptor, Umin, Usup, Vmin, Vsup, Tolerance, Tolerance);
226   //modified by NIZNHY-PKV Thu Apr  4 10:42:39 2002 t
227   myIsDone = Standard_False;
228 }
229 //=======================================================================
230 //function : Init
231 //purpose  : 
232 //=======================================================================
233   void GeomAPI_ProjectPointOnSurf::Init (const Handle(Geom_Surface)& Surface,
234                                          const Standard_Real         Umin,
235                                          const Standard_Real         Usup,
236                                          const Standard_Real         Vmin,
237                                          const Standard_Real         Vsup, 
238                                          const Standard_Real         Tolerance,
239                                          const Extrema_ExtAlgo       theProjAlgo)
240 {
241   //modified by NIZNHY-PKV Thu Apr  4 10:43:00 2002 f
242   //GeomAdaptor_Surface TheSurface (Surface,Umin,Usup,Vmin,Vsup);
243   myGeomAdaptor.Load(Surface, Umin,Usup,Vmin,Vsup);
244   //modified by NIZNHY-PKV Thu Apr  4 10:43:16 2002 t
245   //myExtPS = Extrema_ExtPS();
246   //modified by NIZNHY-PKV Thu Apr  4 10:43:18 2002 f
247   //myExtPS.Initialize(TheSurface, Umin, Usup, Vmin, Vsup, Tolerance, Tolerance);
248   myExtPS.SetAlgo(theProjAlgo);
249   myExtPS.Initialize(myGeomAdaptor, Umin, Usup, Vmin, Vsup, Tolerance, Tolerance);
250   //modified by NIZNHY-PKV Thu Apr  4 10:43:26 2002 t
251   myIsDone = Standard_False;
252 }
253 //=======================================================================
254 //function : Perform
255 //purpose  : 
256 //=======================================================================
257   void GeomAPI_ProjectPointOnSurf::Perform(const gp_Pnt& P)
258 {
259   myExtPS.Perform(P);
260   Init ();
261 }
262 //=======================================================================
263 //function : IsDone
264 //purpose  : 
265 //=======================================================================
266   Standard_Boolean GeomAPI_ProjectPointOnSurf::IsDone () const 
267
268   return myIsDone; 
269 }
270 //=======================================================================
271 //function : NbPoints
272 //purpose  : 
273 //=======================================================================
274   Standard_Integer GeomAPI_ProjectPointOnSurf::NbPoints() const 
275 {
276   if ( myIsDone){
277     return myExtPS.NbExt();
278   }
279   else{
280     return 0;
281   }
282 }
283 //=======================================================================
284 //function : Point
285 //purpose  : 
286 //=======================================================================
287   gp_Pnt GeomAPI_ProjectPointOnSurf::Point(const Standard_Integer Index) const 
288 {
289   Standard_OutOfRange_Raise_if( Index < 1 || Index > NbPoints(),
290                                "GeomAPI_ProjectPointOnSurf::Point");
291   return (myExtPS.Point(Index)).Value();
292 }
293 //=======================================================================
294 //function : Parameters
295 //purpose  : 
296 //=======================================================================
297   void GeomAPI_ProjectPointOnSurf::Parameters(const Standard_Integer Index,
298                                               Standard_Real&   U,
299                                               Standard_Real&   V) const
300 {
301   Standard_OutOfRange_Raise_if( Index < 1 || Index > NbPoints(),
302                                "GeomAPI_ProjectPointOnSurf::Parameter");
303   (myExtPS.Point(Index)).Parameter(U,V);
304 }
305 //=======================================================================
306 //function : Distance
307 //purpose  : 
308 //=======================================================================
309   Standard_Real GeomAPI_ProjectPointOnSurf::Distance  (const Standard_Integer Index) const 
310 {
311   Standard_OutOfRange_Raise_if( Index < 1 || Index > NbPoints(),
312                                "GeomAPI_ProjectPointOnSurf::Distance");
313   return sqrt (myExtPS.SquareDistance(Index));
314 }
315 //=======================================================================
316 //function : NearestPoint
317 //purpose  : 
318 //=======================================================================
319   gp_Pnt GeomAPI_ProjectPointOnSurf::NearestPoint() const 
320 {
321   StdFail_NotDone_Raise_if
322     (!myIsDone, "GeomAPI_ProjectPointOnSurf::NearestPoint");
323
324   return (myExtPS.Point(myIndex)).Value();
325 }
326 //=======================================================================
327 //function : Standard_Integer
328 //purpose  : 
329 //=======================================================================
330   GeomAPI_ProjectPointOnSurf::operator Standard_Integer() const
331 {
332   return NbPoints();
333 }
334 //=======================================================================
335 //function : gp_Pnt
336 //purpose  : 
337 //=======================================================================
338   GeomAPI_ProjectPointOnSurf::operator gp_Pnt() const
339 {
340   return NearestPoint();
341 }
342 //=======================================================================
343 //function : LowerDistanceParameters
344 //purpose  : 
345 //=======================================================================
346   void GeomAPI_ProjectPointOnSurf::LowerDistanceParameters (Standard_Real& U,
347                                                             Standard_Real& V ) const
348 {
349   StdFail_NotDone_Raise_if
350     (!myIsDone, "GeomAPI_ProjectPointOnSurf::LowerDistanceParameters");
351
352   (myExtPS.Point(myIndex)).Parameter(U,V);
353 }
354 //=======================================================================
355 //function : LowerDistance
356 //purpose  : 
357 //=======================================================================
358   Standard_Real GeomAPI_ProjectPointOnSurf::LowerDistance() const
359 {
360   StdFail_NotDone_Raise_if
361     (!myIsDone, "GeomAPI_ProjectPointOnSurf::LowerDistance");
362
363   return sqrt (myExtPS.SquareDistance(myIndex));
364 }
365 //=======================================================================
366 //function : Standard_Real
367 //purpose  : 
368 //=======================================================================
369   GeomAPI_ProjectPointOnSurf::operator Standard_Real() const
370 {
371   return LowerDistance();
372 }
373
374
375
376
377
378
379
380