0031035: Coding - uninitialized class fields reported by Visual Studio Code Analysis
[occt.git] / src / GeomAPI / GeomAPI_ProjectPointOnCurve.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_ExtPC.hxx>
19 #include <Geom_Curve.hxx>
20 #include <GeomAdaptor_Curve.hxx>
21 #include <GeomAPI_ProjectPointOnCurve.hxx>
22 #include <gp_Pnt.hxx>
23 #include <Standard_OutOfRange.hxx>
24 #include <StdFail_NotDone.hxx>
25
26 //=======================================================================
27 //function : GeomAPI_ProjectPointOnCurve
28 //purpose  : 
29 //=======================================================================
30 GeomAPI_ProjectPointOnCurve::GeomAPI_ProjectPointOnCurve()
31 : myIsDone(Standard_False),
32   myIndex(0)
33 {
34 }
35 //=======================================================================
36 //function : GeomAPI_ProjectPointOnCurve
37 //purpose  : 
38 //=======================================================================
39   GeomAPI_ProjectPointOnCurve::GeomAPI_ProjectPointOnCurve
40   (const gp_Pnt&             P, 
41    const Handle(Geom_Curve)& Curve)
42 {
43   Init(P,Curve);
44 }
45 //=======================================================================
46 //function : GeomAPI_ProjectPointOnCurve
47 //purpose  : 
48 //=======================================================================
49   GeomAPI_ProjectPointOnCurve::GeomAPI_ProjectPointOnCurve
50   (const gp_Pnt&             P, 
51    const Handle(Geom_Curve)& Curve,
52    const Standard_Real       Umin,
53    const Standard_Real       Usup)
54 {
55   Init(P,Curve,Umin,Usup);
56 }
57 //=======================================================================
58 //function : Init
59 //purpose  : 
60 //=======================================================================
61   void GeomAPI_ProjectPointOnCurve::Init
62   (const gp_Pnt&             P,
63    const Handle(Geom_Curve)& Curve)
64 {
65   myC.Load(Curve);
66 /*
67   Extrema_ExtPC theExtPC(P, myC);
68   myExtPC = theExtPC;
69 */
70   myExtPC.Initialize(myC, myC.FirstParameter(), myC.LastParameter());
71   myExtPC.Perform(P);
72   
73   myIsDone = myExtPC.IsDone() && ( myExtPC.NbExt() > 0);
74
75   if ( myIsDone) {
76
77     // evaluate the lower distance and its index;
78     
79     Standard_Real Dist2, Dist2Min = myExtPC.SquareDistance(1);
80     myIndex = 1;
81     
82     for ( Standard_Integer i = 2; i <= myExtPC.NbExt(); i++) {
83       Dist2 = myExtPC.SquareDistance(i);
84       if ( Dist2 < Dist2Min) {
85         Dist2Min = Dist2;
86         myIndex = i;
87       }
88     }
89   }
90 }
91 //=======================================================================
92 //function : Init
93 //purpose  : 
94 //=======================================================================
95   void GeomAPI_ProjectPointOnCurve::Init(const gp_Pnt&             P,
96                                          const Handle(Geom_Curve)& Curve,
97                                          const Standard_Real       Umin,
98                                          const Standard_Real       Usup )
99 {
100   myC.Load(Curve,Umin,Usup);
101 /*
102   Extrema_ExtPC theExtPC(P, myC);
103   myExtPC = theExtPC;
104 */
105   myExtPC.Initialize(myC, myC.FirstParameter(), myC.LastParameter());
106   myExtPC.Perform(P);
107   
108   myIsDone = myExtPC.IsDone() && ( myExtPC.NbExt() > 0);
109
110   if ( myIsDone) {
111
112     // evaluate the lower distance and its index;
113     
114     Standard_Real Dist2, Dist2Min = myExtPC.SquareDistance(1);
115     myIndex = 1;
116     
117     for ( Standard_Integer i = 2; i <= myExtPC.NbExt(); i++) {
118       Dist2 = myExtPC.SquareDistance(i);
119       if ( Dist2 < Dist2Min) {
120         Dist2Min = Dist2;
121         myIndex = i;
122       }
123     }
124   }
125 }
126 //modified by NIZNHY-PKV Wed Apr  3 17:48:51 2002f
127 //=======================================================================
128 //function : Init
129 //purpose  : 
130 //=======================================================================
131   void GeomAPI_ProjectPointOnCurve::Init  (const Handle(Geom_Curve)& Curve,
132                                            const Standard_Real       Umin,
133                                            const Standard_Real       Usup )
134 {
135   myC.Load(Curve,Umin,Usup);
136   //myExtPC = Extrema_ExtPC(P, myC);
137   myExtPC.Initialize(myC, Umin, Usup);
138   myIsDone = Standard_False;
139 }
140 //=======================================================================
141 //function : Perform
142 //purpose  : 
143 //=======================================================================
144   void GeomAPI_ProjectPointOnCurve::Perform(const gp_Pnt& aP3D)
145 {
146   myExtPC.Perform(aP3D);
147   
148   myIsDone=myExtPC.IsDone() && ( myExtPC.NbExt() > 0);
149   if (myIsDone) {
150     // evaluate the lower distance and its index;
151     Standard_Real Dist2, Dist2Min = myExtPC.SquareDistance(1);
152     myIndex = 1;
153     
154     for ( Standard_Integer i = 2; i <= myExtPC.NbExt(); i++) {
155       Dist2 = myExtPC.SquareDistance(i);
156       if ( Dist2 < Dist2Min) {
157         Dist2Min = Dist2;
158         myIndex = i;
159       }
160     }
161   }
162 }
163 //modified by NIZNHY-PKV Wed Apr  3 17:48:53 2002t 
164 //=======================================================================
165 //function : NbPoints
166 //purpose  : 
167 //=======================================================================
168   Standard_Integer GeomAPI_ProjectPointOnCurve::NbPoints() const 
169 {
170   if ( myIsDone )
171     return myExtPC.NbExt();
172   else
173     return 0;
174 }
175 //=======================================================================
176 //function : Point
177 //purpose  : 
178 //=======================================================================
179   gp_Pnt GeomAPI_ProjectPointOnCurve::Point(const Standard_Integer Index) const 
180 {
181   Standard_OutOfRange_Raise_if( Index < 1 || Index > NbPoints(),
182                                "GeomAPI_ProjectPointOnCurve::Point");
183   return (myExtPC.Point(Index)).Value();
184 }
185
186
187 //=======================================================================
188 //function : Parameter
189 //purpose  : 
190 //=======================================================================
191
192 Standard_Real GeomAPI_ProjectPointOnCurve::Parameter
193   (const Standard_Integer Index) const
194 {
195   Standard_OutOfRange_Raise_if( Index < 1 || Index > NbPoints(),
196                                "GeomAPI_ProjectPointOnCurve::Parameter");
197   return (myExtPC.Point(Index)).Parameter();
198 }
199 //=======================================================================
200 //function : Parameter
201 //purpose  : 
202 //=======================================================================
203
204 void GeomAPI_ProjectPointOnCurve::Parameter
205   (const Standard_Integer Index,
206          Standard_Real&   U     ) const
207 {
208   Standard_OutOfRange_Raise_if( Index < 1 || Index > NbPoints(),
209                                "GeomAPI_ProjectPointOnCurve::Parameter");
210   U = (myExtPC.Point(Index)).Parameter();
211 }
212 //=======================================================================
213 //function : Distance
214 //purpose  : 
215 //=======================================================================
216 Standard_Real GeomAPI_ProjectPointOnCurve::Distance
217   (const Standard_Integer Index) const 
218 {
219   Standard_OutOfRange_Raise_if( Index < 1 || Index > NbPoints(),
220                                "GeomAPI_ProjectPointOnCurve::Distance");
221   return sqrt (myExtPC.SquareDistance(Index));
222 }
223 //=======================================================================
224 //function : NearestPoint
225 //purpose  : 
226 //=======================================================================
227
228 gp_Pnt GeomAPI_ProjectPointOnCurve::NearestPoint() const 
229 {
230   StdFail_NotDone_Raise_if 
231     ( !myIsDone, "GeomAPI_ProjectPointOnCurve::NearestPoint");
232                             
233   return (myExtPC.Point(myIndex)).Value();
234 }
235 //=======================================================================
236 //function : Standard_Integer
237 //purpose  : 
238 //=======================================================================
239
240 GeomAPI_ProjectPointOnCurve::operator Standard_Integer() const
241 {
242   return NbPoints();
243 }
244 //=======================================================================
245 //function : gp_Pnt
246 //purpose  : 
247 //=======================================================================
248
249 GeomAPI_ProjectPointOnCurve::operator gp_Pnt() const
250 {
251   return NearestPoint();
252 }
253 //=======================================================================
254 //function : LowerDistanceParameter
255 //purpose  : 
256 //=======================================================================
257
258 Standard_Real GeomAPI_ProjectPointOnCurve::LowerDistanceParameter() const
259 {
260   StdFail_NotDone_Raise_if
261     ( !myIsDone, "GeomAPI_ProjectPointOnCurve::LowerDistanceParameter");
262
263   return (myExtPC.Point(myIndex)).Parameter();
264 }
265 //=======================================================================
266 //function : LowerDistance
267 //purpose  : 
268 //=======================================================================
269 Standard_Real GeomAPI_ProjectPointOnCurve::LowerDistance() const
270 {
271   StdFail_NotDone_Raise_if
272     ( !myIsDone, "GeomAPI_ProjectPointOnCurve::LowerDistance");
273
274   return sqrt (myExtPC.SquareDistance(myIndex));
275 }
276 //=======================================================================
277 //function : operator
278 //purpose  : 
279 //=======================================================================
280 GeomAPI_ProjectPointOnCurve::operator Standard_Real() const
281 {
282   return LowerDistance();
283 }