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.
18 #include <Adaptor3d_HCurve.hxx>
19 #include <BiTgte_CurveOnEdge.hxx>
20 #include <BiTgte_HCurveOnEdge.hxx>
21 #include <BRep_Tool.hxx>
22 #include <Geom_BezierCurve.hxx>
23 #include <Geom_BSplineCurve.hxx>
24 #include <Geom_Curve.hxx>
25 #include <Geom_TrimmedCurve.hxx>
26 #include <GeomAdaptor_Curve.hxx>
27 #include <GeomAPI_ProjectPointOnCurve.hxx>
28 #include <gp_Circ.hxx>
29 #include <gp_Elips.hxx>
30 #include <gp_Hypr.hxx>
32 #include <gp_Parab.hxx>
35 #include <Precision.hxx>
36 #include <Standard_DomainError.hxx>
37 #include <Standard_NoSuchObject.hxx>
38 #include <Standard_NotImplemented.hxx>
39 #include <Standard_OutOfRange.hxx>
40 #include <TopoDS_Edge.hxx>
42 //=======================================================================
43 //function : BiTgte_CurveOnEdge
45 //======================================================================
46 BiTgte_CurveOnEdge::BiTgte_CurveOnEdge()
47 : myType(GeomAbs_OtherCurve)
52 //=======================================================================
53 //function : BiTgte_CurveOnEdge
55 //=======================================================================
57 BiTgte_CurveOnEdge::BiTgte_CurveOnEdge(const TopoDS_Edge& theEonF,
58 const TopoDS_Edge& theEdge)
61 myType(GeomAbs_OtherCurve)
63 Init(theEonF, theEdge);
67 //=======================================================================
70 //=======================================================================
72 void BiTgte_CurveOnEdge::Init(const TopoDS_Edge& EonF,
73 const TopoDS_Edge& Edge)
78 myCurv = BRep_Tool::Curve(myEdge,f,l);
79 myCurv = new Geom_TrimmedCurve(myCurv,f,l);
82 myConF = BRep_Tool::Curve(myEonF,f,l);
83 myConF = new Geom_TrimmedCurve(myConF,f,l);
85 // peut on generer un cercle de rayon nul
86 GeomAdaptor_Curve Curv(myCurv);
87 GeomAdaptor_Curve ConF(myConF);
89 myType = GeomAbs_OtherCurve;
90 if (Curv.GetType() == GeomAbs_Line &&
91 ConF.GetType() == GeomAbs_Circle ) {
92 gp_Ax1 a1 = Curv.Line().Position();
93 gp_Ax1 a2 = ConF.Circle().Axis();
94 if ( a1.IsCoaxial(a2,Precision::Angular(),Precision::Confusion())) {
95 myType = GeomAbs_Circle;
96 myCirc = gp_Circ(ConF.Circle().Position(),0.);
102 //=======================================================================
103 //function : FirstParameter
105 //=======================================================================
107 Standard_Real BiTgte_CurveOnEdge::FirstParameter() const
109 return myConF->FirstParameter();
113 //=======================================================================
114 //function : LastParameter
116 //=======================================================================
118 Standard_Real BiTgte_CurveOnEdge::LastParameter() const
120 return myConF->LastParameter();
124 //=======================================================================
127 //=======================================================================
129 GeomAbs_Shape BiTgte_CurveOnEdge::Continuity() const
131 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
136 //=======================================================================
139 //=======================================================================
141 Standard_Integer BiTgte_CurveOnEdge::NbIntervals(const GeomAbs_Shape) const
143 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
148 //=======================================================================
151 //=======================================================================
153 void BiTgte_CurveOnEdge::Intervals(TColStd_Array1OfReal&,
154 const GeomAbs_Shape) const
156 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
160 //=======================================================================
163 //=======================================================================
165 Handle(Adaptor3d_HCurve) BiTgte_CurveOnEdge::Trim(const Standard_Real,
167 const Standard_Real) const
169 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
170 Handle(BiTgte_HCurveOnEdge) HC;
175 //=======================================================================
178 //=======================================================================
180 Standard_Boolean BiTgte_CurveOnEdge::IsClosed() const
182 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
183 return Standard_False;
187 //=======================================================================
190 //=======================================================================
192 Standard_Boolean BiTgte_CurveOnEdge::IsPeriodic() const
194 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
195 return Standard_False;
199 //=======================================================================
202 //=======================================================================
204 Standard_Real BiTgte_CurveOnEdge::Period() const
206 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
211 //=======================================================================
214 //=======================================================================
216 gp_Pnt BiTgte_CurveOnEdge::Value(const Standard_Real U) const
224 //=======================================================================
227 //=======================================================================
229 void BiTgte_CurveOnEdge::D0(const Standard_Real U,gp_Pnt& P) const
231 GeomAPI_ProjectPointOnCurve Projector;
232 P = myConF->Value(U);
233 Projector.Init(P, myCurv);
234 P = Projector.NearestPoint();
238 //=======================================================================
241 //=======================================================================
243 void BiTgte_CurveOnEdge::D1(const Standard_Real,gp_Pnt& ,gp_Vec& ) const
245 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
249 //=======================================================================
252 //=======================================================================
254 void BiTgte_CurveOnEdge::D2(const Standard_Real ,gp_Pnt&,
255 gp_Vec& ,gp_Vec&) const
257 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
261 //=======================================================================
264 //=======================================================================
266 void BiTgte_CurveOnEdge::D3(const Standard_Real ,gp_Pnt&,
267 gp_Vec& ,gp_Vec& ,gp_Vec& ) const
269 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
273 //=======================================================================
276 //=======================================================================
278 gp_Vec BiTgte_CurveOnEdge::DN(const Standard_Real,
279 const Standard_Integer) const
281 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
286 //=======================================================================
289 //=======================================================================
291 Standard_Real BiTgte_CurveOnEdge::Resolution(const Standard_Real) const
293 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
298 //=======================================================================
301 //=======================================================================
303 GeomAbs_CurveType BiTgte_CurveOnEdge::GetType() const
309 //=======================================================================
312 //=======================================================================
314 gp_Lin BiTgte_CurveOnEdge::Line() const
316 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
321 //=======================================================================
324 //=======================================================================
326 gp_Circ BiTgte_CurveOnEdge::Circle() const
328 if ( myType != GeomAbs_Circle) {
329 Standard_NoSuchObject::Raise("BiTgte_CurveOnEdge::Circle");
337 //=======================================================================
340 //=======================================================================
342 gp_Elips BiTgte_CurveOnEdge::Ellipse() const
344 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
349 //=======================================================================
352 //=======================================================================
354 gp_Hypr BiTgte_CurveOnEdge::Hyperbola() const
356 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
361 //=======================================================================
364 //=======================================================================
366 gp_Parab BiTgte_CurveOnEdge::Parabola() const
368 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
373 //=======================================================================
376 //=======================================================================
378 Standard_Integer BiTgte_CurveOnEdge::Degree() const
380 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
385 //=======================================================================
388 //=======================================================================
390 Standard_Boolean BiTgte_CurveOnEdge::IsRational() const
392 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
393 return Standard_False;
397 //=======================================================================
400 //=======================================================================
402 Standard_Integer BiTgte_CurveOnEdge::NbPoles() const
404 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
409 //=======================================================================
412 //=======================================================================
414 Standard_Integer BiTgte_CurveOnEdge::NbKnots() const
416 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
421 //=======================================================================
424 //=======================================================================
426 Handle(Geom_BezierCurve) BiTgte_CurveOnEdge::Bezier() const
428 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
429 Handle(Geom_BezierCurve) B;
434 //=======================================================================
437 //=======================================================================
439 Handle(Geom_BSplineCurve) BiTgte_CurveOnEdge::BSpline() const
441 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
442 Handle(Geom_BSplineCurve) B;