b311480e |
1 | // Copyright (c) 1995-1999 Matra Datavision |
973c2be1 |
2 | // Copyright (c) 1999-2014 OPEN CASCADE SAS |
b311480e |
3 | // |
973c2be1 |
4 | // This file is part of Open CASCADE Technology software library. |
b311480e |
5 | // |
d5f74e42 |
6 | // This library is free software; you can redistribute it and/or modify it under |
7 | // the terms of the GNU Lesser General Public License version 2.1 as published |
973c2be1 |
8 | // by the Free Software Foundation, with special exception defined in the file |
9 | // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT |
10 | // distribution for complete text of the license and disclaimer of any warranty. |
b311480e |
11 | // |
973c2be1 |
12 | // Alternatively, this file may be used under the terms of Open CASCADE |
13 | // commercial license or contractual agreement. |
7fd59977 |
14 | |
42cf5bc1 |
15 | |
16 | #include <BRepAdaptor_Curve.hxx> |
17 | #include <BRepGProp_EdgeTool.hxx> |
7fd59977 |
18 | #include <Geom_BezierCurve.hxx> |
19 | #include <Geom_BSplineCurve.hxx> |
42cf5bc1 |
20 | #include <Geom_Curve.hxx> |
21 | #include <GeomAdaptor_Curve.hxx> |
22 | #include <gp_Pnt.hxx> |
23 | #include <gp_Vec.hxx> |
24 | #include <Standard_OutOfRange.hxx> |
7fd59977 |
25 | |
26 | Standard_Real BRepGProp_EdgeTool::FirstParameter(const BRepAdaptor_Curve& C) |
27 | { |
28 | return C.FirstParameter(); |
29 | } |
30 | |
31 | Standard_Real BRepGProp_EdgeTool::LastParameter(const BRepAdaptor_Curve& C) |
32 | { |
33 | return C.LastParameter(); |
34 | } |
35 | |
36 | Standard_Integer BRepGProp_EdgeTool::IntegrationOrder(const BRepAdaptor_Curve& BAC) |
37 | { |
38 | switch (BAC.GetType()) { |
39 | |
40 | case GeomAbs_Line : |
41 | return 2; |
42 | |
43 | case GeomAbs_Parabola : |
44 | return 5; |
45 | |
46 | case GeomAbs_BezierCurve : |
47 | { |
48 | const GeomAdaptor_Curve& GAC = BAC.Curve(); |
49 | const Handle(Geom_Curve)& GC = GAC.Curve(); |
c5f3a425 |
50 | Handle(Geom_BezierCurve) GBZC (Handle(Geom_BezierCurve)::DownCast (GC)); |
7fd59977 |
51 | Standard_Integer n = 2*(GBZC->NbPoles()) - 1; |
52 | return n; |
53 | } |
54 | break; |
55 | case GeomAbs_BSplineCurve : |
56 | { |
57 | const GeomAdaptor_Curve& GAC = BAC.Curve(); |
58 | const Handle(Geom_Curve)& GC = GAC.Curve(); |
c5f3a425 |
59 | Handle(Geom_BSplineCurve) GBSC (Handle(Geom_BSplineCurve)::DownCast (GC)); |
7fd59977 |
60 | Standard_Integer n = 2*(GBSC->NbPoles()) - 1; |
61 | return n; |
62 | } |
63 | break; |
64 | |
65 | default : |
66 | return 10; |
67 | } |
7fd59977 |
68 | } |
69 | |
70 | gp_Pnt BRepGProp_EdgeTool::Value(const BRepAdaptor_Curve& C, const Standard_Real U) |
71 | { |
72 | return C.Value(U); |
73 | } |
74 | |
75 | void BRepGProp_EdgeTool::D1(const BRepAdaptor_Curve& C, |
76 | const Standard_Real U, gp_Pnt& P, gp_Vec& V1) |
77 | { |
78 | C.D1(U,P,V1); |
79 | } |
80 | |
81 | // modified by NIZHNY-MKK Thu Jun 9 12:15:15 2005.BEGIN |
82 | Standard_Integer BRepGProp_EdgeTool::NbIntervals(const BRepAdaptor_Curve& C,const GeomAbs_Shape S) |
83 | { |
84 | BRepAdaptor_Curve* pC = (BRepAdaptor_Curve*) &C; // at the moment actually NbIntervals() does not modify the |
85 | // object "C". So it is safe to do such a cast. |
86 | return pC->NbIntervals(S); |
87 | } |
88 | |
89 | void BRepGProp_EdgeTool::Intervals(const BRepAdaptor_Curve& C,TColStd_Array1OfReal& T,const GeomAbs_Shape S) |
90 | { |
91 | BRepAdaptor_Curve* pC = (BRepAdaptor_Curve*) &C; // at the moment actually Intervals() does not modify the |
92 | // object "C". So it is safe to do such a cast. |
93 | pC->Intervals(T, S); |
94 | } |
95 | // modified by NIZHNY-MKK Thu Jun 9 12:15:18 2005.END |