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
6 // This file is part of Open CASCADE Technology software library.
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.
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
17 #include <Geom2dAPI_ExtremaCurveCurve.ixx>
19 #include <Geom2dAdaptor_Curve.hxx>
20 #include <Extrema_POnCurv2d.hxx>
22 #include <Precision.hxx>
24 //=======================================================================
25 //function : Geom2dAPI_ExtremaCurveCurve
27 //=======================================================================
29 //Geom2dAPI_ExtremaCurveCurve::Geom2dAPI_ExtremaCurveCurve()
34 //=======================================================================
35 //function : Geom2dAPI_ExtremaCurveCurve
37 //=======================================================================
39 Geom2dAPI_ExtremaCurveCurve::Geom2dAPI_ExtremaCurveCurve
40 (const Handle(Geom2d_Curve)& C1,
41 const Handle(Geom2d_Curve)& C2,
42 const Standard_Real U1min,
43 const Standard_Real U1max,
44 const Standard_Real U2min,
45 const Standard_Real U2max)
47 myC1.Load(C1, U1min, U1max);
48 myC2.Load(C2, U2min, U2max);
49 Extrema_ExtCC2d theExtCC( myC1, myC2 );
53 myIsDone = myExtCC.IsDone() && ( myExtCC.NbExt() > 0);
57 // evaluate the lower distance and its index;
59 Standard_Real Dist2, Dist2Min = myExtCC.SquareDistance(1);
62 for ( Standard_Integer i = 2; i <= myExtCC.NbExt(); i++) {
63 Dist2 = myExtCC.SquareDistance(i);
64 if ( Dist2 < Dist2Min) {
73 //=======================================================================
74 //function : NbExtrema
76 //=======================================================================
78 Standard_Integer Geom2dAPI_ExtremaCurveCurve::NbExtrema() const
81 return myExtCC.NbExt();
87 //=======================================================================
90 //=======================================================================
92 void Geom2dAPI_ExtremaCurveCurve::Points
93 (const Standard_Integer Index,
97 Standard_OutOfRange_Raise_if
98 (Index<1||Index>NbExtrema(), "Geom2dAPI_ExtremaCurveCurve::Points");
100 Extrema_POnCurv2d PC1, PC2;
101 myExtCC.Points(Index,PC1,PC2);
108 //=======================================================================
109 //function : Parameters
111 //=======================================================================
113 void Geom2dAPI_ExtremaCurveCurve::Parameters
114 (const Standard_Integer Index,
116 Standard_Real& U2) const
118 Standard_OutOfRange_Raise_if
119 (Index<1||Index>NbExtrema(), "Geom2dAPI_ExtremaCurveCurve::Parameters");
121 Extrema_POnCurv2d PC1, PC2;
122 myExtCC.Points(Index,PC1,PC2);
124 U1 = PC1.Parameter();
125 U2 = PC2.Parameter();
129 //=======================================================================
130 //function : Distance
132 //=======================================================================
134 Standard_Real Geom2dAPI_ExtremaCurveCurve::Distance
135 (const Standard_Integer Index) const
137 Standard_OutOfRange_Raise_if
138 (Index<1||Index>NbExtrema(), "Geom2dAPI_ExtremaCurveCurve:Distance");
140 return sqrt (myExtCC.SquareDistance(Index));
144 //=======================================================================
145 //function : NearestPoints
147 //=======================================================================
149 void Geom2dAPI_ExtremaCurveCurve::NearestPoints
150 (gp_Pnt2d& P1, gp_Pnt2d& P2) const
152 StdFail_NotDone_Raise_if
153 ( !myIsDone, "Geom2dAPI_ExtremaCurveCurve:NearestPoints");
155 Points(myIndex,P1,P2);
159 //=======================================================================
160 //function : LowerDistanceParameters
162 //=======================================================================
164 void Geom2dAPI_ExtremaCurveCurve::LowerDistanceParameters
166 Standard_Real& U2) const
168 StdFail_NotDone_Raise_if
169 ( !myIsDone, "Geom2dAPI_ExtremaCurveCurve:LowerDistanceParameters");
171 Parameters(myIndex,U1,U2);
175 //=======================================================================
176 //function : LowerDistance
178 //=======================================================================
180 Standard_Real Geom2dAPI_ExtremaCurveCurve::LowerDistance() const
182 StdFail_NotDone_Raise_if
183 (!myIsDone, "Geom2dAPI_ExtremaCurveCurve:LowerDistance");
185 return sqrt (myExtCC.SquareDistance(myIndex));
189 //=======================================================================
190 //function : Standard_Real
192 //=======================================================================
194 Geom2dAPI_ExtremaCurveCurve::operator Standard_Real() const
196 return LowerDistance();
200 //=======================================================================
201 //function : Standard_Integer
203 //=======================================================================
205 Geom2dAPI_ExtremaCurveCurve::operator Standard_Integer() const
207 return myExtCC.NbExt();