1 // Created on: 1993-02-22
2 // Created by: Remi LEQUETTE
3 // Copyright (c) 1993-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 #ifndef _BRepAdaptor_Surface_HeaderFile
18 #define _BRepAdaptor_Surface_HeaderFile
20 #include <Adaptor3d_Surface.hxx>
21 #include <GeomAdaptor_Surface.hxx>
22 #include <GeomAbs_Shape.hxx>
23 #include <GeomAbs_SurfaceType.hxx>
24 #include <gp_Trsf.hxx>
25 #include <TColStd_Array1OfReal.hxx>
26 #include <TopoDS_Face.hxx>
28 class Standard_OutOfRange;
29 class Standard_DomainError;
30 class Standard_NoSuchObject;
39 class Geom_BezierSurface;
40 class Geom_BSplineSurface;
44 DEFINE_STANDARD_HANDLE(BRepAdaptor_Surface, Adaptor3d_Surface)
46 //! The Surface from BRepAdaptor allows to use a Face
47 //! of the BRep topology look like a 3D surface.
49 //! It has the methods of the class Surface from
52 //! It is created or initialized with a Face. It takes
53 //! into account the local coordinates system.
55 //! The u,v parameter range is the minmax value for
56 //! the restriction, unless the flag restriction is
58 class BRepAdaptor_Surface : public Adaptor3d_Surface
60 DEFINE_STANDARD_RTTIEXT(BRepAdaptor_Surface, Adaptor3d_Surface)
63 //! Creates an undefined surface with no face loaded.
64 Standard_EXPORT BRepAdaptor_Surface();
66 //! Creates a surface to access the geometry of <F>.
67 //! If <Restriction> is true the parameter range is
68 //! the parameter range in the UV space of the
70 Standard_EXPORT BRepAdaptor_Surface(const TopoDS_Face& F, const Standard_Boolean R = Standard_True);
72 //! Sets the surface to the geometry of <F>.
73 Standard_EXPORT void Initialize (const TopoDS_Face& F, const Standard_Boolean Restriction = Standard_True);
75 //! Returns the surface.
76 Standard_EXPORT const GeomAdaptor_Surface& Surface() const;
78 //! Returns the surface.
79 Standard_EXPORT GeomAdaptor_Surface& ChangeSurface();
81 //! Returns the surface coordinate system.
82 Standard_EXPORT const gp_Trsf& Trsf() const;
85 Standard_EXPORT const TopoDS_Face& Face() const;
87 //! Returns the face tolerance.
88 Standard_EXPORT Standard_Real Tolerance() const;
90 virtual Standard_Real FirstUParameter() const Standard_OVERRIDE { return mySurf.FirstUParameter(); }
92 virtual Standard_Real LastUParameter() const Standard_OVERRIDE { return mySurf.LastUParameter(); }
94 virtual Standard_Real FirstVParameter() const Standard_OVERRIDE { return mySurf.FirstVParameter(); }
96 virtual Standard_Real LastVParameter() const Standard_OVERRIDE { return mySurf.LastVParameter(); }
98 virtual GeomAbs_Shape UContinuity() const Standard_OVERRIDE { return mySurf.UContinuity(); }
100 virtual GeomAbs_Shape VContinuity() const Standard_OVERRIDE { return mySurf.VContinuity(); }
102 //! If necessary, breaks the surface in U intervals of
103 //! continuity <S>. And returns the number of
105 virtual Standard_Integer NbUIntervals (const GeomAbs_Shape theSh) const Standard_OVERRIDE { return mySurf.NbUIntervals (theSh); }
107 //! If necessary, breaks the surface in V intervals of
108 //! continuity <S>. And returns the number of
110 virtual Standard_Integer NbVIntervals (const GeomAbs_Shape theSh) const Standard_OVERRIDE { return mySurf.NbVIntervals (theSh); }
112 //! Returns the intervals with the requested continuity
113 //! in the U direction.
114 Standard_EXPORT void UIntervals (TColStd_Array1OfReal& T, const GeomAbs_Shape S) const Standard_OVERRIDE;
116 //! Returns the intervals with the requested continuity
117 //! in the V direction.
118 Standard_EXPORT void VIntervals (TColStd_Array1OfReal& T, const GeomAbs_Shape S) const Standard_OVERRIDE;
120 //! Returns a surface trimmed in the U direction
121 //! equivalent of <me> between
122 //! parameters <First> and <Last>. <Tol> is used to
123 //! test for 3d points confusion.
124 //! If <First> >= <Last>
125 Standard_EXPORT Handle(Adaptor3d_Surface) UTrim (const Standard_Real First, const Standard_Real Last, const Standard_Real Tol) const Standard_OVERRIDE;
127 //! Returns a surface trimmed in the V direction between
128 //! parameters <First> and <Last>. <Tol> is used to
129 //! test for 3d points confusion.
130 //! If <First> >= <Last>
131 Standard_EXPORT Handle(Adaptor3d_Surface) VTrim (const Standard_Real First, const Standard_Real Last, const Standard_Real Tol) const Standard_OVERRIDE;
133 virtual Standard_Boolean IsUClosed() const Standard_OVERRIDE { return mySurf.IsUClosed(); }
135 virtual Standard_Boolean IsVClosed() const Standard_OVERRIDE { return mySurf.IsVClosed(); }
137 virtual Standard_Boolean IsUPeriodic() const Standard_OVERRIDE { return mySurf.IsUPeriodic(); }
139 virtual Standard_Real UPeriod() const Standard_OVERRIDE { return mySurf.UPeriod(); }
141 virtual Standard_Boolean IsVPeriodic() const Standard_OVERRIDE { return mySurf.IsVPeriodic(); }
143 virtual Standard_Real VPeriod() const Standard_OVERRIDE { return mySurf.VPeriod(); }
145 //! Computes the point of parameters U,V on the surface.
146 Standard_EXPORT gp_Pnt Value (const Standard_Real U, const Standard_Real V) const Standard_OVERRIDE;
148 //! Computes the point of parameters U,V on the surface.
149 Standard_EXPORT void D0 (const Standard_Real U, const Standard_Real V, gp_Pnt& P) const Standard_OVERRIDE;
151 //! Computes the point and the first derivatives on
153 //! Raised if the continuity of the current
154 //! intervals is not C1.
155 Standard_EXPORT void D1 (const Standard_Real U, const Standard_Real V, gp_Pnt& P, gp_Vec& D1U, gp_Vec& D1V) const Standard_OVERRIDE;
157 //! Computes the point, the first and second
158 //! derivatives on the surface.
159 //! Raised if the continuity of the current
160 //! intervals is not C2.
161 Standard_EXPORT void D2 (const Standard_Real U, const Standard_Real V, gp_Pnt& P, gp_Vec& D1U, gp_Vec& D1V, gp_Vec& D2U, gp_Vec& D2V, gp_Vec& D2UV) const Standard_OVERRIDE;
163 //! Computes the point, the first, second and third
164 //! derivatives on the surface.
165 //! Raised if the continuity of the current
166 //! intervals is not C3.
167 Standard_EXPORT void D3 (const Standard_Real U, const Standard_Real V, gp_Pnt& P, gp_Vec& D1U, gp_Vec& D1V, gp_Vec& D2U, gp_Vec& D2V, gp_Vec& D2UV, gp_Vec& D3U, gp_Vec& D3V, gp_Vec& D3UUV, gp_Vec& D3UVV) const Standard_OVERRIDE;
169 //! Computes the derivative of order Nu in the direction
170 //! U and Nv in the direction V at the point P(U, V).
171 //! Raised if the current U interval is not not CNu
172 //! and the current V interval is not CNv.
173 //! Raised if Nu + Nv < 1 or Nu < 0 or Nv < 0.
174 Standard_EXPORT gp_Vec DN (const Standard_Real U, const Standard_Real V, const Standard_Integer Nu, const Standard_Integer Nv) const Standard_OVERRIDE;
176 //! Returns the parametric U resolution corresponding
177 //! to the real space resolution <R3d>.
178 virtual Standard_Real UResolution (const Standard_Real theR3d) const Standard_OVERRIDE { return mySurf.UResolution (theR3d); }
180 //! Returns the parametric V resolution corresponding
181 //! to the real space resolution <R3d>.
182 virtual Standard_Real VResolution (const Standard_Real theR3d) const Standard_OVERRIDE { return mySurf.VResolution (theR3d); }
184 //! Returns the type of the surface : Plane, Cylinder,
185 //! Cone, Sphere, Torus, BezierSurface,
186 //! BSplineSurface, SurfaceOfRevolution,
187 //! SurfaceOfExtrusion, OtherSurface
188 virtual GeomAbs_SurfaceType GetType() const Standard_OVERRIDE { return mySurf.GetType(); }
190 Standard_EXPORT gp_Pln Plane() const Standard_OVERRIDE;
192 Standard_EXPORT gp_Cylinder Cylinder() const Standard_OVERRIDE;
194 Standard_EXPORT gp_Cone Cone() const Standard_OVERRIDE;
196 Standard_EXPORT gp_Sphere Sphere() const Standard_OVERRIDE;
198 Standard_EXPORT gp_Torus Torus() const Standard_OVERRIDE;
200 virtual Standard_Integer UDegree() const Standard_OVERRIDE { return mySurf.UDegree(); }
202 virtual Standard_Integer NbUPoles() const Standard_OVERRIDE { return mySurf.NbUPoles(); }
204 virtual Standard_Integer VDegree() const Standard_OVERRIDE { return mySurf.VDegree(); }
206 virtual Standard_Integer NbVPoles() const Standard_OVERRIDE { return mySurf.NbVPoles(); }
208 virtual Standard_Integer NbUKnots() const Standard_OVERRIDE { return mySurf.NbUKnots(); }
210 virtual Standard_Integer NbVKnots() const Standard_OVERRIDE { return mySurf.NbVKnots(); }
212 virtual Standard_Boolean IsURational() const Standard_OVERRIDE { return mySurf.IsURational(); }
214 virtual Standard_Boolean IsVRational() const Standard_OVERRIDE { return mySurf.IsVRational(); }
216 Standard_EXPORT Handle(Geom_BezierSurface) Bezier() const Standard_OVERRIDE;
218 //! Warning : this will make a copy of the
219 //! BSpline Surface since it applies
220 //! to it the myTsrf transformation
221 //! Be Careful when using this method
222 Standard_EXPORT Handle(Geom_BSplineSurface) BSpline() const Standard_OVERRIDE;
224 Standard_EXPORT gp_Ax1 AxeOfRevolution() const Standard_OVERRIDE;
226 Standard_EXPORT gp_Dir Direction() const Standard_OVERRIDE;
228 //! only for SurfaceOfExtrusion and SurfaceOfRevolution
229 //! Warning: this will make a copy of the underlying curve
230 //! since it applies to it the transformation
231 //! myTrsf. Be careful when using this method.
232 Standard_EXPORT Handle(Adaptor3d_Curve) BasisCurve() const Standard_OVERRIDE;
234 Standard_EXPORT Handle(Adaptor3d_Surface) BasisSurface() const Standard_OVERRIDE;
236 Standard_EXPORT Standard_Real OffsetValue() const Standard_OVERRIDE;
240 GeomAdaptor_Surface mySurf;
246 #endif // _BRepAdaptor_Surface_HeaderFile