1 // Created on: 1997-01-10
2 // Created by: Bruno DUMORTIER
3 // Copyright (c) 1997-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 <BiTgte_CurveOnEdge.ixx>
19 #include <BiTgte_HCurveOnEdge.hxx>
20 #include <BRep_Tool.hxx>
21 #include <Geom_TrimmedCurve.hxx>
22 #include <GeomAPI_ProjectPointOnCurve.hxx>
23 #include <GeomAdaptor_Curve.hxx>
24 #include <Standard_NotImplemented.hxx>
25 #include <Precision.hxx>
28 //=======================================================================
29 //function : BiTgte_CurveOnEdge
31 //======================================================================
33 BiTgte_CurveOnEdge::BiTgte_CurveOnEdge()
38 //=======================================================================
39 //function : BiTgte_CurveOnEdge
41 //=======================================================================
43 BiTgte_CurveOnEdge::BiTgte_CurveOnEdge(const TopoDS_Edge& EonF,
44 const TopoDS_Edge& Edge)
50 //=======================================================================
53 //=======================================================================
55 void BiTgte_CurveOnEdge::Init(const TopoDS_Edge& EonF,
56 const TopoDS_Edge& Edge)
61 myCurv = BRep_Tool::Curve(myEdge,f,l);
62 myCurv = new Geom_TrimmedCurve(myCurv,f,l);
65 myConF = BRep_Tool::Curve(myEonF,f,l);
66 myConF = new Geom_TrimmedCurve(myConF,f,l);
68 // peut on generer un cercle de rayon nul
69 GeomAdaptor_Curve Curv(myCurv);
70 GeomAdaptor_Curve ConF(myConF);
72 myType = GeomAbs_OtherCurve;
73 if (Curv.GetType() == GeomAbs_Line &&
74 ConF.GetType() == GeomAbs_Circle ) {
75 gp_Ax1 a1 = Curv.Line().Position();
76 gp_Ax1 a2 = ConF.Circle().Axis();
77 if ( a1.IsCoaxial(a2,Precision::Angular(),Precision::Confusion())) {
78 myType = GeomAbs_Circle;
79 myCirc = gp_Circ(ConF.Circle().Position(),0.);
85 //=======================================================================
86 //function : FirstParameter
88 //=======================================================================
90 Standard_Real BiTgte_CurveOnEdge::FirstParameter() const
92 return myConF->FirstParameter();
96 //=======================================================================
97 //function : LastParameter
99 //=======================================================================
101 Standard_Real BiTgte_CurveOnEdge::LastParameter() const
103 return myConF->LastParameter();
107 //=======================================================================
110 //=======================================================================
112 GeomAbs_Shape BiTgte_CurveOnEdge::Continuity() const
114 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
119 //=======================================================================
122 //=======================================================================
124 Standard_Integer BiTgte_CurveOnEdge::NbIntervals(const GeomAbs_Shape) const
126 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
131 //=======================================================================
134 //=======================================================================
136 void BiTgte_CurveOnEdge::Intervals(TColStd_Array1OfReal&,
137 const GeomAbs_Shape) const
139 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
143 //=======================================================================
146 //=======================================================================
148 Handle(Adaptor3d_HCurve) BiTgte_CurveOnEdge::Trim(const Standard_Real,
150 const Standard_Real) const
152 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
153 Handle(BiTgte_HCurveOnEdge) HC;
158 //=======================================================================
161 //=======================================================================
163 Standard_Boolean BiTgte_CurveOnEdge::IsClosed() const
165 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
166 return Standard_False;
170 //=======================================================================
173 //=======================================================================
175 Standard_Boolean BiTgte_CurveOnEdge::IsPeriodic() const
177 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
178 return Standard_False;
182 //=======================================================================
185 //=======================================================================
187 Standard_Real BiTgte_CurveOnEdge::Period() const
189 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
194 //=======================================================================
197 //=======================================================================
199 gp_Pnt BiTgte_CurveOnEdge::Value(const Standard_Real U) const
207 //=======================================================================
210 //=======================================================================
212 void BiTgte_CurveOnEdge::D0(const Standard_Real U,gp_Pnt& P) const
214 GeomAPI_ProjectPointOnCurve Projector;
215 P = myConF->Value(U);
216 Projector.Init(P, myCurv);
217 P = Projector.NearestPoint();
221 //=======================================================================
224 //=======================================================================
226 void BiTgte_CurveOnEdge::D1(const Standard_Real,gp_Pnt& ,gp_Vec& ) const
228 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
232 //=======================================================================
235 //=======================================================================
237 void BiTgte_CurveOnEdge::D2(const Standard_Real ,gp_Pnt&,
238 gp_Vec& ,gp_Vec&) const
240 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
244 //=======================================================================
247 //=======================================================================
249 void BiTgte_CurveOnEdge::D3(const Standard_Real ,gp_Pnt&,
250 gp_Vec& ,gp_Vec& ,gp_Vec& ) const
252 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
256 //=======================================================================
259 //=======================================================================
261 gp_Vec BiTgte_CurveOnEdge::DN(const Standard_Real,
262 const Standard_Integer) const
264 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
269 //=======================================================================
272 //=======================================================================
274 Standard_Real BiTgte_CurveOnEdge::Resolution(const Standard_Real) const
276 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
281 //=======================================================================
284 //=======================================================================
286 GeomAbs_CurveType BiTgte_CurveOnEdge::GetType() const
292 //=======================================================================
295 //=======================================================================
297 gp_Lin BiTgte_CurveOnEdge::Line() const
299 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
304 //=======================================================================
307 //=======================================================================
309 gp_Circ BiTgte_CurveOnEdge::Circle() const
311 if ( myType != GeomAbs_Circle) {
312 Standard_NoSuchObject::Raise("BiTgte_CurveOnEdge::Circle");
320 //=======================================================================
323 //=======================================================================
325 gp_Elips BiTgte_CurveOnEdge::Ellipse() const
327 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
332 //=======================================================================
335 //=======================================================================
337 gp_Hypr BiTgte_CurveOnEdge::Hyperbola() const
339 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
344 //=======================================================================
347 //=======================================================================
349 gp_Parab BiTgte_CurveOnEdge::Parabola() const
351 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
356 //=======================================================================
359 //=======================================================================
361 Standard_Integer BiTgte_CurveOnEdge::Degree() const
363 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
368 //=======================================================================
371 //=======================================================================
373 Standard_Boolean BiTgte_CurveOnEdge::IsRational() const
375 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
376 return Standard_False;
380 //=======================================================================
383 //=======================================================================
385 Standard_Integer BiTgte_CurveOnEdge::NbPoles() const
387 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
392 //=======================================================================
395 //=======================================================================
397 Standard_Integer BiTgte_CurveOnEdge::NbKnots() const
399 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
404 //=======================================================================
407 //=======================================================================
409 Handle(Geom_BezierCurve) BiTgte_CurveOnEdge::Bezier() const
411 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
412 Handle(Geom_BezierCurve) B;
417 //=======================================================================
420 //=======================================================================
422 Handle(Geom_BSplineCurve) BiTgte_CurveOnEdge::BSpline() const
424 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
425 Handle(Geom_BSplineCurve) B;