0031642: Visualization - crash in Graphic3d_Structure::SetVisual() on redisplaying...
[occt.git] / src / Geom2dAPI / Geom2dAPI_ExtremaCurveCurve.cxx
CommitLineData
b311480e 1// Created on: 1994-03-23
2// Created by: Bruno DUMORTIER
3// Copyright (c) 1994-1999 Matra Datavision
973c2be1 4// Copyright (c) 1999-2014 OPEN CASCADE SAS
b311480e 5//
973c2be1 6// This file is part of Open CASCADE Technology software library.
b311480e 7//
d5f74e42 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
973c2be1 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.
b311480e 13//
973c2be1 14// Alternatively, this file may be used under the terms of Open CASCADE
15// commercial license or contractual agreement.
7fd59977 16
7fd59977 17
42cf5bc1 18#include <Extrema_ExtCC2d.hxx>
7fd59977 19#include <Extrema_POnCurv2d.hxx>
42cf5bc1 20#include <Geom2d_Curve.hxx>
21#include <Geom2dAdaptor_Curve.hxx>
22#include <Geom2dAPI_ExtremaCurveCurve.hxx>
23#include <gp_Pnt2d.hxx>
7fd59977 24#include <Precision.hxx>
42cf5bc1 25#include <Standard_OutOfRange.hxx>
26#include <StdFail_NotDone.hxx>
7fd59977 27
28//=======================================================================
29//function : Geom2dAPI_ExtremaCurveCurve
30//purpose :
31//=======================================================================
7fd59977 32//Geom2dAPI_ExtremaCurveCurve::Geom2dAPI_ExtremaCurveCurve()
33//{
34//}
7fd59977 35//=======================================================================
36//function : Geom2dAPI_ExtremaCurveCurve
37//purpose :
38//=======================================================================
7fd59977 39Geom2dAPI_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)
46{
47 myC1.Load(C1, U1min, U1max);
48 myC2.Load(C2, U2min, U2max);
49 Extrema_ExtCC2d theExtCC( myC1, myC2 );
50
51 myExtCC = theExtCC;
52
53 myIsDone = myExtCC.IsDone() && ( myExtCC.NbExt() > 0);
54
55
56 if ( myIsDone ) {
57 // evaluate the lower distance and its index;
58
59 Standard_Real Dist2, Dist2Min = myExtCC.SquareDistance(1);
60 myIndex = 1;
61
62 for ( Standard_Integer i = 2; i <= myExtCC.NbExt(); i++) {
63 Dist2 = myExtCC.SquareDistance(i);
64 if ( Dist2 < Dist2Min) {
65 Dist2Min = Dist2;
66 myIndex = i;
67 }
68 }
69 }
70}
71
72
73//=======================================================================
74//function : NbExtrema
75//purpose :
76//=======================================================================
77
78Standard_Integer Geom2dAPI_ExtremaCurveCurve::NbExtrema() const
79{
80 if ( myIsDone)
81 return myExtCC.NbExt();
82 else
83 return 0;
84}
85
86
87//=======================================================================
88//function : Points
89//purpose :
90//=======================================================================
91
92void Geom2dAPI_ExtremaCurveCurve::Points
93 (const Standard_Integer Index,
94 gp_Pnt2d& P1,
95 gp_Pnt2d& P2) const
96{
97 Standard_OutOfRange_Raise_if
98 (Index<1||Index>NbExtrema(), "Geom2dAPI_ExtremaCurveCurve::Points");
99
100 Extrema_POnCurv2d PC1, PC2;
101 myExtCC.Points(Index,PC1,PC2);
102
103 P1 = PC1.Value();
104 P2 = PC2.Value();
105}
106
107
108//=======================================================================
109//function : Parameters
110//purpose :
111//=======================================================================
112
113void Geom2dAPI_ExtremaCurveCurve::Parameters
114 (const Standard_Integer Index,
115 Standard_Real& U1,
116 Standard_Real& U2) const
117{
118 Standard_OutOfRange_Raise_if
119 (Index<1||Index>NbExtrema(), "Geom2dAPI_ExtremaCurveCurve::Parameters");
120
121 Extrema_POnCurv2d PC1, PC2;
122 myExtCC.Points(Index,PC1,PC2);
123
124 U1 = PC1.Parameter();
125 U2 = PC2.Parameter();
126}
127
128
129//=======================================================================
130//function : Distance
131//purpose :
132//=======================================================================
133
134Standard_Real Geom2dAPI_ExtremaCurveCurve::Distance
135 (const Standard_Integer Index) const
136{
137 Standard_OutOfRange_Raise_if
138 (Index<1||Index>NbExtrema(), "Geom2dAPI_ExtremaCurveCurve:Distance");
139
140 return sqrt (myExtCC.SquareDistance(Index));
141}
142
143
144//=======================================================================
145//function : NearestPoints
146//purpose :
147//=======================================================================
148
149void Geom2dAPI_ExtremaCurveCurve::NearestPoints
150 (gp_Pnt2d& P1, gp_Pnt2d& P2) const
151{
152 StdFail_NotDone_Raise_if
153 ( !myIsDone, "Geom2dAPI_ExtremaCurveCurve:NearestPoints");
154
155 Points(myIndex,P1,P2);
156}
157
158
159//=======================================================================
160//function : LowerDistanceParameters
161//purpose :
162//=======================================================================
163
164void Geom2dAPI_ExtremaCurveCurve::LowerDistanceParameters
165 (Standard_Real& U1,
166 Standard_Real& U2) const
167{
168 StdFail_NotDone_Raise_if
169 ( !myIsDone, "Geom2dAPI_ExtremaCurveCurve:LowerDistanceParameters");
170
171 Parameters(myIndex,U1,U2);
172}
173
174
175//=======================================================================
176//function : LowerDistance
177//purpose :
178//=======================================================================
179
180Standard_Real Geom2dAPI_ExtremaCurveCurve::LowerDistance() const
181{
182 StdFail_NotDone_Raise_if
183 (!myIsDone, "Geom2dAPI_ExtremaCurveCurve:LowerDistance");
184
185 return sqrt (myExtCC.SquareDistance(myIndex));
186}
187
188
189//=======================================================================
190//function : Standard_Real
191//purpose :
192//=======================================================================
193
194Geom2dAPI_ExtremaCurveCurve::operator Standard_Real() const
195{
196 return LowerDistance();
197}
198
199
200//=======================================================================
201//function : Standard_Integer
202//purpose :
203//=======================================================================
204
205Geom2dAPI_ExtremaCurveCurve::operator Standard_Integer() const
206{
207 return myExtCC.NbExt();
208}