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