1 // Created on: 1993-03-31
2 // Created by: Bruno DUMORTIER
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 _Adaptor3d_Surface_HeaderFile
18 #define _Adaptor3d_Surface_HeaderFile
20 #include <Adaptor3d_Curve.hxx>
21 #include <GeomAbs_Shape.hxx>
22 #include <GeomAbs_SurfaceType.hxx>
24 #include <gp_Cylinder.hxx>
25 #include <gp_Cone.hxx>
27 #include <gp_Sphere.hxx>
28 #include <gp_Torus.hxx>
29 #include <Standard.hxx>
30 #include <Standard_DefineAlloc.hxx>
31 #include <Standard_Handle.hxx>
32 #include <TColStd_Array1OfReal.hxx>
34 class Geom_BezierSurface;
35 class Geom_BSplineSurface;
37 DEFINE_STANDARD_HANDLE(Adaptor3d_Surface, Standard_Transient)
39 //! Root class for surfaces on which geometric algorithms work.
40 //! An adapted surface is an interface between the
41 //! services provided by a surface and those required of
42 //! the surface by algorithms which use it.
43 //! A derived concrete class is provided:
44 //! GeomAdaptor_Surface for a surface from the Geom package.
45 //! The Surface class describes the standard behaviour
46 //! of a surface for generic algorithms.
48 //! The Surface can be decomposed in intervals of any
49 //! continuity in U and V using the method NbIntervals.
50 //! A current interval can be set.
51 //! Most of the methods apply to the current interval.
52 //! Warning: All the methods are virtual and implemented with a
53 //! raise to allow to redefined only the methods really used.
55 //! Polynomial coefficients of BSpline surfaces used for their evaluation are cached for better performance.
56 //! Therefore these evaluations are not thread-safe and parallel evaluations need to be prevented.
57 class Adaptor3d_Surface : public Standard_Transient
59 DEFINE_STANDARD_RTTIEXT(Adaptor3d_Surface, Standard_Transient)
62 Standard_EXPORT virtual Standard_Real FirstUParameter() const;
64 Standard_EXPORT virtual Standard_Real LastUParameter() const;
66 Standard_EXPORT virtual Standard_Real FirstVParameter() const;
68 Standard_EXPORT virtual Standard_Real LastVParameter() const;
70 Standard_EXPORT virtual GeomAbs_Shape UContinuity() const;
72 Standard_EXPORT virtual GeomAbs_Shape VContinuity() const;
74 //! Returns the number of U intervals for continuity
75 //! <S>. May be one if UContinuity(me) >= <S>
76 Standard_EXPORT virtual Standard_Integer NbUIntervals (const GeomAbs_Shape S) const;
78 //! Returns the number of V intervals for continuity
79 //! <S>. May be one if VContinuity(me) >= <S>
80 Standard_EXPORT virtual Standard_Integer NbVIntervals (const GeomAbs_Shape S) const;
82 //! Returns the intervals with the requested continuity
83 //! in the U direction.
84 Standard_EXPORT virtual void UIntervals (TColStd_Array1OfReal& T, const GeomAbs_Shape S) const;
86 //! Returns the intervals with the requested continuity
87 //! in the V direction.
88 Standard_EXPORT virtual void VIntervals (TColStd_Array1OfReal& T, const GeomAbs_Shape S) const;
90 //! Returns a surface trimmed in the U direction
91 //! equivalent of <me> between
92 //! parameters <First> and <Last>. <Tol> is used to
93 //! test for 3d points confusion.
94 //! If <First> >= <Last>
95 Standard_EXPORT virtual Handle(Adaptor3d_Surface) UTrim (const Standard_Real First, const Standard_Real Last, const Standard_Real Tol) const;
97 //! Returns a surface trimmed in the V direction between
98 //! parameters <First> and <Last>. <Tol> is used to
99 //! test for 3d points confusion.
100 //! If <First> >= <Last>
101 Standard_EXPORT virtual Handle(Adaptor3d_Surface) VTrim (const Standard_Real First, const Standard_Real Last, const Standard_Real Tol) const;
103 Standard_EXPORT virtual Standard_Boolean IsUClosed() const;
105 Standard_EXPORT virtual Standard_Boolean IsVClosed() const;
107 Standard_EXPORT virtual Standard_Boolean IsUPeriodic() const;
109 Standard_EXPORT virtual Standard_Real UPeriod() const;
111 Standard_EXPORT virtual Standard_Boolean IsVPeriodic() const;
113 Standard_EXPORT virtual Standard_Real VPeriod() const;
115 //! Computes the point of parameters U,V on the surface.
116 Standard_EXPORT virtual gp_Pnt Value (const Standard_Real U, const Standard_Real V) const;
118 //! Computes the point of parameters U,V on the surface.
119 Standard_EXPORT virtual void D0 (const Standard_Real U, const Standard_Real V, gp_Pnt& P) const;
121 //! Computes the point and the first derivatives on
123 //! Raised if the continuity of the current
124 //! intervals is not C1.
125 Standard_EXPORT virtual void D1 (const Standard_Real U, const Standard_Real V, gp_Pnt& P, gp_Vec& D1U, gp_Vec& D1V) const;
127 //! Computes the point, the first and second
128 //! derivatives on the surface.
129 //! Raised if the continuity of the current
130 //! intervals is not C2.
131 Standard_EXPORT virtual 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;
133 //! Computes the point, the first, second and third
134 //! derivatives on the surface.
135 //! Raised if the continuity of the current
136 //! intervals is not C3.
137 Standard_EXPORT virtual 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;
139 //! Computes the derivative of order Nu in the direction U and Nv
140 //! in the direction V at the point P(U, V).
141 //! Raised if the current U interval is not not CNu
142 //! and the current V interval is not CNv.
143 //! Raised if Nu + Nv < 1 or Nu < 0 or Nv < 0.
144 Standard_EXPORT virtual gp_Vec DN (const Standard_Real U, const Standard_Real V, const Standard_Integer Nu, const Standard_Integer Nv) const;
146 //! Returns the parametric U resolution corresponding
147 //! to the real space resolution <R3d>.
148 Standard_EXPORT virtual Standard_Real UResolution (const Standard_Real R3d) const;
150 //! Returns the parametric V resolution corresponding
151 //! to the real space resolution <R3d>.
152 Standard_EXPORT virtual Standard_Real VResolution (const Standard_Real R3d) const;
154 //! Returns the type of the surface : Plane, Cylinder,
155 //! Cone, Sphere, Torus, BezierSurface,
156 //! BSplineSurface, SurfaceOfRevolution,
157 //! SurfaceOfExtrusion, OtherSurface
158 Standard_EXPORT virtual GeomAbs_SurfaceType GetType() const;
160 Standard_EXPORT virtual gp_Pln Plane() const;
162 Standard_EXPORT virtual gp_Cylinder Cylinder() const;
164 Standard_EXPORT virtual gp_Cone Cone() const;
166 Standard_EXPORT virtual gp_Sphere Sphere() const;
168 Standard_EXPORT virtual gp_Torus Torus() const;
170 Standard_EXPORT virtual Standard_Integer UDegree() const;
172 Standard_EXPORT virtual Standard_Integer NbUPoles() const;
174 Standard_EXPORT virtual Standard_Integer VDegree() const;
176 Standard_EXPORT virtual Standard_Integer NbVPoles() const;
178 Standard_EXPORT virtual Standard_Integer NbUKnots() const;
180 Standard_EXPORT virtual Standard_Integer NbVKnots() const;
182 Standard_EXPORT virtual Standard_Boolean IsURational() const;
184 Standard_EXPORT virtual Standard_Boolean IsVRational() const;
186 Standard_EXPORT virtual Handle(Geom_BezierSurface) Bezier() const;
188 Standard_EXPORT virtual Handle(Geom_BSplineSurface) BSpline() const;
190 Standard_EXPORT virtual gp_Ax1 AxeOfRevolution() const;
192 Standard_EXPORT virtual gp_Dir Direction() const;
194 Standard_EXPORT virtual Handle(Adaptor3d_Curve) BasisCurve() const;
196 Standard_EXPORT virtual Handle(Adaptor3d_Surface) BasisSurface() const;
198 Standard_EXPORT virtual Standard_Real OffsetValue() const;
199 Standard_EXPORT virtual ~Adaptor3d_Surface();
203 #endif // _Adaptor3d_Surface_HeaderFile