1 // Created on: 1997-01-10
2 // Created by: Bruno DUMORTIER
3 // Copyright (c) 1997-1999 Matra Datavision
4 // Copyright (c) 1999-2012 OPEN CASCADE SAS
6 // The content of this file is subject to the Open CASCADE Technology Public
7 // License Version 6.5 (the "License"). You may not use the content of this file
8 // except in compliance with the License. Please obtain a copy of the License
9 // at http://www.opencascade.org and read it completely before using this file.
11 // The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
12 // main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
14 // The Original Code and all software distributed under the License is
15 // distributed on an "AS IS" basis, without warranty of any kind, and the
16 // Initial Developer hereby disclaims all such warranties, including without
17 // limitation, any warranties of merchantability, fitness for a particular
18 // purpose or non-infringement. Please see the License for the specific terms
19 // and conditions governing the rights and limitations under the License.
23 #include <BiTgte_CurveOnEdge.ixx>
25 #include <BiTgte_HCurveOnEdge.hxx>
26 #include <BRep_Tool.hxx>
27 #include <Geom_TrimmedCurve.hxx>
28 #include <GeomAPI_ProjectPointOnCurve.hxx>
29 #include <GeomAdaptor_Curve.hxx>
30 #include <Standard_NotImplemented.hxx>
31 #include <Precision.hxx>
34 //=======================================================================
35 //function : BiTgte_CurveOnEdge
37 //======================================================================
39 BiTgte_CurveOnEdge::BiTgte_CurveOnEdge()
44 //=======================================================================
45 //function : BiTgte_CurveOnEdge
47 //=======================================================================
49 BiTgte_CurveOnEdge::BiTgte_CurveOnEdge(const TopoDS_Edge& EonF,
50 const TopoDS_Edge& Edge)
56 //=======================================================================
59 //=======================================================================
61 void BiTgte_CurveOnEdge::Init(const TopoDS_Edge& EonF,
62 const TopoDS_Edge& Edge)
67 myCurv = BRep_Tool::Curve(myEdge,f,l);
68 myCurv = new Geom_TrimmedCurve(myCurv,f,l);
71 myConF = BRep_Tool::Curve(myEonF,f,l);
72 myConF = new Geom_TrimmedCurve(myConF,f,l);
74 // peut on generer un cercle de rayon nul
75 GeomAdaptor_Curve Curv(myCurv);
76 GeomAdaptor_Curve ConF(myConF);
78 myType = GeomAbs_OtherCurve;
79 if (Curv.GetType() == GeomAbs_Line &&
80 ConF.GetType() == GeomAbs_Circle ) {
81 gp_Ax1 a1 = Curv.Line().Position();
82 gp_Ax1 a2 = ConF.Circle().Axis();
83 if ( a1.IsCoaxial(a2,Precision::Angular(),Precision::Confusion())) {
84 myType = GeomAbs_Circle;
85 myCirc = gp_Circ(ConF.Circle().Position(),0.);
91 //=======================================================================
92 //function : FirstParameter
94 //=======================================================================
96 Standard_Real BiTgte_CurveOnEdge::FirstParameter() const
98 return myConF->FirstParameter();
102 //=======================================================================
103 //function : LastParameter
105 //=======================================================================
107 Standard_Real BiTgte_CurveOnEdge::LastParameter() const
109 return myConF->LastParameter();
113 //=======================================================================
116 //=======================================================================
118 GeomAbs_Shape BiTgte_CurveOnEdge::Continuity() const
120 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
125 //=======================================================================
128 //=======================================================================
130 Standard_Integer BiTgte_CurveOnEdge::NbIntervals(const GeomAbs_Shape S) const
132 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
137 //=======================================================================
140 //=======================================================================
142 void BiTgte_CurveOnEdge::Intervals(TColStd_Array1OfReal& T,
143 const GeomAbs_Shape S) const
145 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
149 //=======================================================================
152 //=======================================================================
154 Handle(Adaptor3d_HCurve) BiTgte_CurveOnEdge::Trim(const Standard_Real First,
155 const Standard_Real Last,
156 const Standard_Real Tol) const
158 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
159 Handle(BiTgte_HCurveOnEdge) HC;
164 //=======================================================================
167 //=======================================================================
169 Standard_Boolean BiTgte_CurveOnEdge::IsClosed() const
171 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
172 return Standard_False;
176 //=======================================================================
179 //=======================================================================
181 Standard_Boolean BiTgte_CurveOnEdge::IsPeriodic() const
183 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
184 return Standard_False;
188 //=======================================================================
191 //=======================================================================
193 Standard_Real BiTgte_CurveOnEdge::Period() const
195 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
200 //=======================================================================
203 //=======================================================================
205 gp_Pnt BiTgte_CurveOnEdge::Value(const Standard_Real U) const
213 //=======================================================================
216 //=======================================================================
218 void BiTgte_CurveOnEdge::D0(const Standard_Real U,gp_Pnt& P) const
220 GeomAPI_ProjectPointOnCurve Projector;
221 P = myConF->Value(U);
222 Projector.Init(P, myCurv);
223 P = Projector.NearestPoint();
227 //=======================================================================
230 //=======================================================================
232 void BiTgte_CurveOnEdge::D1(const Standard_Real U,gp_Pnt& P,gp_Vec& V) const
234 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
238 //=======================================================================
241 //=======================================================================
243 void BiTgte_CurveOnEdge::D2(const Standard_Real U,gp_Pnt& P,
244 gp_Vec& V1,gp_Vec& V2) const
246 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
250 //=======================================================================
253 //=======================================================================
255 void BiTgte_CurveOnEdge::D3(const Standard_Real U,gp_Pnt& P,
256 gp_Vec& V1,gp_Vec& V2,gp_Vec& V3) const
258 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
262 //=======================================================================
265 //=======================================================================
267 gp_Vec BiTgte_CurveOnEdge::DN(const Standard_Real U,
268 const Standard_Integer N) const
270 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
275 //=======================================================================
278 //=======================================================================
280 Standard_Real BiTgte_CurveOnEdge::Resolution(const Standard_Real R3d) const
282 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
287 //=======================================================================
290 //=======================================================================
292 GeomAbs_CurveType BiTgte_CurveOnEdge::GetType() const
298 //=======================================================================
301 //=======================================================================
303 gp_Lin BiTgte_CurveOnEdge::Line() const
305 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
310 //=======================================================================
313 //=======================================================================
315 gp_Circ BiTgte_CurveOnEdge::Circle() const
317 if ( myType != GeomAbs_Circle) {
318 Standard_NoSuchObject::Raise("BiTgte_CurveOnEdge::Circle");
326 //=======================================================================
329 //=======================================================================
331 gp_Elips BiTgte_CurveOnEdge::Ellipse() const
333 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
338 //=======================================================================
341 //=======================================================================
343 gp_Hypr BiTgte_CurveOnEdge::Hyperbola() const
345 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
350 //=======================================================================
353 //=======================================================================
355 gp_Parab BiTgte_CurveOnEdge::Parabola() const
357 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
362 //=======================================================================
365 //=======================================================================
367 Standard_Integer BiTgte_CurveOnEdge::Degree() const
369 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
374 //=======================================================================
377 //=======================================================================
379 Standard_Boolean BiTgte_CurveOnEdge::IsRational() const
381 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
382 return Standard_False;
386 //=======================================================================
389 //=======================================================================
391 Standard_Integer BiTgte_CurveOnEdge::NbPoles() const
393 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
398 //=======================================================================
401 //=======================================================================
403 Standard_Integer BiTgte_CurveOnEdge::NbKnots() const
405 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
410 //=======================================================================
413 //=======================================================================
415 Handle(Geom_BezierCurve) BiTgte_CurveOnEdge::Bezier() const
417 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
418 Handle(Geom_BezierCurve) B;
423 //=======================================================================
426 //=======================================================================
428 Handle(Geom_BSplineCurve) BiTgte_CurveOnEdge::BSpline() const
430 Standard_NotImplemented::Raise("BiTgte_CurveOnEdge");
431 Handle(Geom_BSplineCurve) B;