1 // Created on: 1998-08-20 2 // Created by: Philippe MANGIN 3 // Copyright (c) 1998-1999 Matra Datavision 4 // Copyright (c) 1999-2014 OPEN CASCADE SAS 5 // 6 // This file is part of Open CASCADE Technology software library. 7 // 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. 13 // 14 // Alternatively, this file may be used under the terms of Open CASCADE 15 // commercial license or contractual agreement. 16 17 #ifndef _BRepAdaptor_CompCurve_HeaderFile 18 #define _BRepAdaptor_CompCurve_HeaderFile 19 20 #include <Standard.hxx> 21 #include <Standard_DefineAlloc.hxx> 22 #include <Standard_Handle.hxx> 23 24 #include <TopoDS_Wire.hxx> 25 #include <Standard_Real.hxx> 26 #include <BRepAdaptor_HArray1OfCurve.hxx> 27 #include <TColStd_HArray1OfReal.hxx> 28 #include <Standard_Integer.hxx> 29 #include <Standard_Boolean.hxx> 30 #include <Adaptor3d_Curve.hxx> 31 #include <GeomAbs_Shape.hxx> 32 #include <TColStd_Array1OfReal.hxx> 33 #include <GeomAbs_CurveType.hxx> 34 35 class TopoDS_Edge; 36 class gp_Pnt; 37 class gp_Vec; 38 class gp_Lin; 39 class gp_Circ; 40 class gp_Elips; 41 class gp_Hypr; 42 class gp_Parab; 43 class Geom_BezierCurve; 44 class Geom_BSplineCurve; 45 46 DEFINE_STANDARD_HANDLE(BRepAdaptor_CompCurve, Adaptor3d_Curve) 47 48 //! The Curve from BRepAdaptor allows to use a Wire 49 //! of the BRep topology like a 3D curve. 50 //! Warning: With this class of curve, C0 and C1 continuities 51 //! are not assumed. So be careful with some algorithm! 52 //! Please note that BRepAdaptor_CompCurve cannot be 53 //! periodic curve at all (even if it contains single 54 //! periodic edge). 55 //! 56 //! BRepAdaptor_CompCurve can only work on valid wires where all edges are 57 //! connected to each other to make a chain. 58 class BRepAdaptor_CompCurve : public Adaptor3d_Curve 59 { 60 DEFINE_STANDARD_RTTIEXT(BRepAdaptor_CompCurve, Adaptor3d_Curve) 61 public: 62 63 //! Creates an undefined Curve with no Wire loaded. 64 Standard_EXPORT BRepAdaptor_CompCurve(); 65 66 Standard_EXPORT BRepAdaptor_CompCurve(const TopoDS_Wire& W, const Standard_Boolean KnotByCurvilinearAbcissa = Standard_False); 67 68 //! Creates a Curve to access the geometry of edge 69 //! <W>. 70 Standard_EXPORT BRepAdaptor_CompCurve(const TopoDS_Wire& W, const Standard_Boolean KnotByCurvilinearAbcissa, const Standard_Real First, const Standard_Real Last, const Standard_Real Tol); 71 72 //! Shallow copy of adaptor 73 Standard_EXPORT virtual Handle(Adaptor3d_Curve) ShallowCopy() const Standard_OVERRIDE; 74 75 //! Sets the wire <W>. 76 Standard_EXPORT void Initialize (const TopoDS_Wire& W, const Standard_Boolean KnotByCurvilinearAbcissa); 77 78 //! Sets wire <W> and trimmed parameter. 79 Standard_EXPORT void Initialize (const TopoDS_Wire& W, const Standard_Boolean KnotByCurvilinearAbcissa, const Standard_Real First, const Standard_Real Last, const Standard_Real Tol); 80 81 //! Returns the wire. 82 Standard_EXPORT const TopoDS_Wire& Wire() const; 83 84 //! returns an edge and one parameter on them 85 //! corresponding to the parameter U. 86 Standard_EXPORT void Edge (const Standard_Real U, TopoDS_Edge& E, Standard_Real& UonE) const; 87 88 Standard_EXPORT Standard_Real FirstParameter() const Standard_OVERRIDE; 89 90 Standard_EXPORT Standard_Real LastParameter() const Standard_OVERRIDE; 91 92 Standard_EXPORT GeomAbs_Shape Continuity() const Standard_OVERRIDE; 93 94 //! Returns the number of intervals for continuity 95 //! <S>. May be one if Continuity(me) >= <S> 96 Standard_EXPORT Standard_Integer NbIntervals (const GeomAbs_Shape S) const Standard_OVERRIDE; 97 98 //! Stores in <T> the parameters bounding the intervals 99 //! of continuity <S>. 100 //! 101 //! The array must provide enough room to accommodate 102 //! for the parameters. i.e. T.Length() > NbIntervals() 103 Standard_EXPORT void Intervals (TColStd_Array1OfReal& T, const GeomAbs_Shape S) const Standard_OVERRIDE; 104 105 //! Returns a curve equivalent of <me> between 106 //! parameters <First> and <Last>. <Tol> is used to 107 //! test for 3d points confusion. 108 //! If <First> >= <Last> 109 Standard_EXPORT Handle(Adaptor3d_Curve) Trim (const Standard_Real First, const Standard_Real Last, const Standard_Real Tol) const Standard_OVERRIDE; 110 111 Standard_EXPORT Standard_Boolean IsClosed() const Standard_OVERRIDE; 112 113 Standard_EXPORT Standard_Boolean IsPeriodic() const Standard_OVERRIDE; 114 115 Standard_EXPORT Standard_Real Period() const Standard_OVERRIDE; 116 117 //! Computes the point of parameter U on the curve 118 Standard_EXPORT gp_Pnt Value (const Standard_Real U) const Standard_OVERRIDE; 119 120 //! Computes the point of parameter U. 121 Standard_EXPORT void D0 (const Standard_Real U, gp_Pnt& P) const Standard_OVERRIDE; 122 123 //! Computes the point of parameter U on the curve 124 //! with its first derivative. 125 //! Raised if the continuity of the current interval 126 //! is not C1. 127 Standard_EXPORT void D1 (const Standard_Real U, gp_Pnt& P, gp_Vec& V) const Standard_OVERRIDE; 128 129 130 //! Returns the point P of parameter U, the first and second 131 //! derivatives V1 and V2. 132 //! Raised if the continuity of the current interval 133 //! is not C2. 134 Standard_EXPORT void D2 (const Standard_Real U, gp_Pnt& P, gp_Vec& V1, gp_Vec& V2) const Standard_OVERRIDE; 135 136 137 //! Returns the point P of parameter U, the first, the second 138 //! and the third derivative. 139 //! Raised if the continuity of the current interval 140 //! is not C3. 141 Standard_EXPORT void D3 (const Standard_Real U, gp_Pnt& P, gp_Vec& V1, gp_Vec& V2, gp_Vec& V3) const Standard_OVERRIDE; 142 143 144 //! The returned vector gives the value of the derivative for the 145 //! order of derivation N. 146 //! Raised if the continuity of the current interval 147 //! is not CN. 148 //! Raised if N < 1. 149 Standard_EXPORT gp_Vec DN (const Standard_Real U, const Standard_Integer N) const Standard_OVERRIDE; 150 151 //! returns the parametric resolution 152 Standard_EXPORT Standard_Real Resolution (const Standard_Real R3d) const Standard_OVERRIDE; 153 154 Standard_EXPORT GeomAbs_CurveType GetType() const Standard_OVERRIDE; 155 156 Standard_EXPORT gp_Lin Line() const Standard_OVERRIDE; 157 158 Standard_EXPORT gp_Circ Circle() const Standard_OVERRIDE; 159 160 Standard_EXPORT gp_Elips Ellipse() const Standard_OVERRIDE; 161 162 Standard_EXPORT gp_Hypr Hyperbola() const Standard_OVERRIDE; 163 164 Standard_EXPORT gp_Parab Parabola() const Standard_OVERRIDE; 165 166 Standard_EXPORT Standard_Integer Degree() const Standard_OVERRIDE; 167 168 Standard_EXPORT Standard_Boolean IsRational() const Standard_OVERRIDE; 169 170 Standard_EXPORT Standard_Integer NbPoles() const Standard_OVERRIDE; 171 172 Standard_EXPORT Standard_Integer NbKnots() const Standard_OVERRIDE; 173 174 Standard_EXPORT Handle(Geom_BezierCurve) Bezier() const Standard_OVERRIDE; 175 176 Standard_EXPORT Handle(Geom_BSplineCurve) BSpline() const Standard_OVERRIDE; 177 178 179 180 181 protected: 182 183 184 185 186 187 private: 188 189 190 Standard_EXPORT void Prepare (Standard_Real& W, Standard_Real& D, Standard_Integer& ind) const; 191 192 Standard_EXPORT void InvPrepare (const Standard_Integer ind, Standard_Real& F, Standard_Real& D) const; 193 194 195 TopoDS_Wire myWire; 196 Standard_Real TFirst; 197 Standard_Real TLast; 198 Standard_Real PTol; 199 Handle(BRepAdaptor_HArray1OfCurve) myCurves; 200 Handle(TColStd_HArray1OfReal) myKnots; 201 Standard_Integer CurIndex; 202 Standard_Boolean Forward; 203 Standard_Boolean IsbyAC; 204 }; 205 206 207 208 209 210 211 212 #endif // _BRepAdaptor_CompCurve_HeaderFile 213