1 // File: BRepExtrema_ExtPC.cxx
2 // Created: Wed Dec 15 16:48:53 1993
3 // Author: Christophe MARION
6 #include <BRepExtrema_ExtPC.ixx>
7 #include <BRep_Tool.hxx>
8 #include <StdFail_NotDone.hxx>
9 #include <Standard_Failure.hxx>
10 #include <BRepAdaptor_Curve.hxx>
11 #include <BRepAdaptor_HCurve.hxx>
14 //=======================================================================
15 //function : BRepExtrema_ExtPC
17 //=======================================================================
19 BRepExtrema_ExtPC::BRepExtrema_ExtPC()
23 //=======================================================================
24 //function : BRepExtrema_ExtPC
26 //=======================================================================
28 BRepExtrema_ExtPC::BRepExtrema_ExtPC
29 (const TopoDS_Vertex& V,
36 //=======================================================================
37 //function : Initialize
39 //=======================================================================
41 void BRepExtrema_ExtPC::Initialize(const TopoDS_Edge& E)
44 BRepAdaptor_Curve Curv(E);
45 myHC = new BRepAdaptor_HCurve(Curv);
46 BRep_Tool::Range(E,U1,U2);
47 myExtrem.Initialize(myHC->Curve(),U1,U2);
50 //=======================================================================
53 //=======================================================================
55 void BRepExtrema_ExtPC::Perform(const TopoDS_Vertex& V)
57 gp_Pnt P = BRep_Tool::Pnt(V);
61 //=======================================================================
64 //=======================================================================
66 Standard_Boolean BRepExtrema_ExtPC::IsDone()const
68 return myExtrem.IsDone();
71 //=======================================================================
74 //=======================================================================
76 Standard_Integer BRepExtrema_ExtPC::NbExt() const
78 if(!myExtrem.IsDone()) StdFail_NotDone::Raise();
79 return myExtrem.NbExt();
82 //=======================================================================
85 //=======================================================================
87 Standard_Boolean BRepExtrema_ExtPC::IsMin
88 (const Standard_Integer N) const
90 if(!myExtrem.IsDone()) StdFail_NotDone::Raise();
91 if ((N < 1) || (N > myExtrem.NbExt())) Standard_OutOfRange::Raise();
92 return myExtrem.IsMin(N);
95 //=======================================================================
98 //=======================================================================
100 Standard_Real BRepExtrema_ExtPC::SquareDistance
101 (const Standard_Integer N) const
103 if(!myExtrem.IsDone()) StdFail_NotDone::Raise();
104 if ((N < 1) || (N > myExtrem.NbExt())) Standard_OutOfRange::Raise();
105 return myExtrem.SquareDistance(N);
108 //=======================================================================
109 //function : Parameter
111 //=======================================================================
113 Standard_Real BRepExtrema_ExtPC::Parameter
114 (const Standard_Integer N) const
116 if(!myExtrem.IsDone()) StdFail_NotDone::Raise();
117 if ((N < 1) || (N > myExtrem.NbExt())) Standard_OutOfRange::Raise();
118 return myExtrem.Point(N).Parameter();
121 //=======================================================================
124 //=======================================================================
126 gp_Pnt BRepExtrema_ExtPC::Point
127 (const Standard_Integer N) const
129 if(!myExtrem.IsDone()) StdFail_NotDone::Raise();
130 if ((N < 1) || (N > myExtrem.NbExt())) Standard_OutOfRange::Raise();
131 return (myExtrem.Point(N).Value());
134 //=======================================================================
135 //function : TrimmedDistances
137 //=======================================================================
139 void BRepExtrema_ExtPC::TrimmedSquareDistances
140 (Standard_Real& dist1,
141 Standard_Real& dist2,
145 myExtrem.TrimmedSquareDistances(dist1,dist2,pnt1,pnt2);