1 // File: Geom2dAPI_ProjectPointOnCurve.cxx
2 // Created: Wed Mar 23 15:16:37 1994
3 // Author: Bruno DUMORTIER
6 #include <Geom2dAPI_ProjectPointOnCurve.ixx>
8 #include <Geom2dAdaptor_Curve.hxx>
11 //=======================================================================
12 //function : Geom2dAPI_ProjectPointOnCurve
14 //=======================================================================
16 Geom2dAPI_ProjectPointOnCurve::Geom2dAPI_ProjectPointOnCurve()
18 myIsDone = Standard_False;
22 //=======================================================================
23 //function : Geom2dAPI_ProjectPointOnCurve
25 //=======================================================================
27 Geom2dAPI_ProjectPointOnCurve::Geom2dAPI_ProjectPointOnCurve
29 const Handle(Geom2d_Curve)& Curve)
35 //=======================================================================
36 //function : Geom2dAPI_ProjectPointOnCurve
38 //=======================================================================
40 Geom2dAPI_ProjectPointOnCurve::Geom2dAPI_ProjectPointOnCurve
42 const Handle(Geom2d_Curve)& Curve,
43 const Standard_Real Umin,
44 const Standard_Real Usup)
46 Init(P,Curve,Umin,Usup);
50 //=======================================================================
53 //=======================================================================
55 void Geom2dAPI_ProjectPointOnCurve::Init
57 const Handle(Geom2d_Curve)& Curve)
59 Init(P,Curve,Curve->FirstParameter(),Curve->LastParameter());
63 //=======================================================================
66 //=======================================================================
68 void Geom2dAPI_ProjectPointOnCurve::Init
70 const Handle(Geom2d_Curve)& Curve,
71 const Standard_Real Umin,
72 const Standard_Real Usup )
74 myC.Load(Curve,Umin,Usup);
76 Extrema_ExtPC2d theExtPC2d(P, myC);
80 myIsDone = myExtPC.IsDone() && ( myExtPC.NbExt() > 0);
83 // evaluate the lower distance and its index;
86 Standard_Real Dist2, Dist2Min = myExtPC.SquareDistance(1);
89 for ( Standard_Integer i = 2; i <= myExtPC.NbExt(); i++) {
90 Dist2 = myExtPC.SquareDistance(i);
91 if ( Dist2 < Dist2Min) {
100 //=======================================================================
101 //function : NbPoints
103 //=======================================================================
105 Standard_Integer Geom2dAPI_ProjectPointOnCurve::NbPoints() const
108 return myExtPC.NbExt();
114 //=======================================================================
117 //=======================================================================
119 gp_Pnt2d Geom2dAPI_ProjectPointOnCurve::Point
120 (const Standard_Integer Index) const
122 Standard_OutOfRange_Raise_if( Index < 1 || Index > NbPoints(),
123 "Geom2dAPI_ProjectPointOnCurve::Point");
124 return (myExtPC.Point(Index)).Value();
128 //=======================================================================
129 //function : Parameter
131 //=======================================================================
133 Standard_Real Geom2dAPI_ProjectPointOnCurve::Parameter
134 (const Standard_Integer Index) const
136 Standard_OutOfRange_Raise_if( Index < 1 || Index > NbPoints(),
137 "Geom2dAPI_ProjectPointOnCurve::Parameter");
138 return (myExtPC.Point(Index)).Parameter();
142 //=======================================================================
143 //function : Parameter
145 //=======================================================================
147 void Geom2dAPI_ProjectPointOnCurve::Parameter
148 (const Standard_Integer Index,
149 Standard_Real& U ) const
151 Standard_OutOfRange_Raise_if( Index < 1 || Index > NbPoints(),
152 "Geom2dAPI_ProjectPointOnCurve::Parameter");
153 U = (myExtPC.Point(Index)).Parameter();
157 //=======================================================================
158 //function : Distance
160 //=======================================================================
162 Standard_Real Geom2dAPI_ProjectPointOnCurve::Distance
163 (const Standard_Integer Index) const
165 Standard_OutOfRange_Raise_if( Index < 1 || Index > NbPoints(),
166 "Geom2dAPI_ProjectPointOnCurve::Distance");
167 return sqrt(myExtPC.SquareDistance(Index));
171 //=======================================================================
172 //function : NearestPoint
174 //=======================================================================
176 gp_Pnt2d Geom2dAPI_ProjectPointOnCurve::NearestPoint() const
178 StdFail_NotDone_Raise_if
179 (!myIsDone, "Geom2dAPI_ProjectPointOnCurve:NearestPoint");
181 return (myExtPC.Point(myIndex)).Value();
185 //=======================================================================
186 //function : Standard_Integer
188 //=======================================================================
190 Geom2dAPI_ProjectPointOnCurve::operator Standard_Integer() const
196 //=======================================================================
197 //function : gp_Pnt2d
199 //=======================================================================
201 Geom2dAPI_ProjectPointOnCurve::operator gp_Pnt2d() const
203 return NearestPoint();
207 //=======================================================================
208 //function : LowerDistanceParameter
210 //=======================================================================
212 Standard_Real Geom2dAPI_ProjectPointOnCurve::LowerDistanceParameter() const
214 StdFail_NotDone_Raise_if
215 (!myIsDone, "Geom2dAPI_ProjectPointOnCurve:LowerDistanceParameter");
217 return (myExtPC.Point(myIndex)).Parameter();
221 //=======================================================================
222 //function : LowerDistance
224 //=======================================================================
226 Standard_Real Geom2dAPI_ProjectPointOnCurve::LowerDistance() const
228 StdFail_NotDone_Raise_if
229 (!myIsDone,"Geom2dAPI_ProjectPointOnCurve:LowerDistance");
231 return sqrt (myExtPC.SquareDistance(myIndex));
235 //=======================================================================
236 //function : operator
238 //=======================================================================
240 Geom2dAPI_ProjectPointOnCurve::operator Standard_Real() const
242 return LowerDistance();