42cf5bc1 |
1 | // Created on: 1993-07-12 |
2 | // Created by: Remi LEQUETTE |
3 | // Copyright (c) 1993-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 _BRepBuilderAPI_MakeFace_HeaderFile |
18 | #define _BRepBuilderAPI_MakeFace_HeaderFile |
19 | |
20 | #include <Standard.hxx> |
21 | #include <Standard_DefineAlloc.hxx> |
22 | #include <Standard_Handle.hxx> |
23 | |
24 | #include <BRepLib_MakeFace.hxx> |
25 | #include <BRepBuilderAPI_MakeShape.hxx> |
26 | #include <Standard_Real.hxx> |
27 | #include <Standard_Boolean.hxx> |
28 | #include <BRepBuilderAPI_FaceError.hxx> |
29 | class StdFail_NotDone; |
30 | class TopoDS_Face; |
31 | class gp_Pln; |
32 | class gp_Cylinder; |
33 | class gp_Cone; |
34 | class gp_Sphere; |
35 | class gp_Torus; |
36 | class Geom_Surface; |
37 | class TopoDS_Wire; |
38 | |
39 | |
40 | //! Provides methods to build faces. |
41 | //! |
42 | //! A face may be built : |
43 | //! |
44 | //! * From a surface. |
45 | //! |
46 | //! - Elementary surface from gp. |
47 | //! |
48 | //! - Surface from Geom. |
49 | //! |
50 | //! * From a surface and U,V values. |
51 | //! |
52 | //! * From a wire. |
53 | //! |
54 | //! - Find the surface automatically if possible. |
55 | //! |
56 | //! * From a surface and a wire. |
57 | //! |
58 | //! - A flag Inside is given, when this flag is True |
59 | //! the wire is oriented to bound a finite area on |
60 | //! the surface. |
61 | //! |
62 | //! * From a face and a wire. |
63 | //! |
64 | //! - The new wire is a perforation. |
65 | class BRepBuilderAPI_MakeFace : public BRepBuilderAPI_MakeShape |
66 | { |
67 | public: |
68 | |
69 | DEFINE_STANDARD_ALLOC |
70 | |
71 | |
72 | //! Not done. |
73 | Standard_EXPORT BRepBuilderAPI_MakeFace(); |
74 | |
75 | //! Load a face. Usefull to add wires. |
76 | Standard_EXPORT BRepBuilderAPI_MakeFace(const TopoDS_Face& F); |
77 | |
78 | //! Make a face from a plane. |
79 | Standard_EXPORT BRepBuilderAPI_MakeFace(const gp_Pln& P); |
80 | |
81 | //! Make a face from a cylinder. |
82 | Standard_EXPORT BRepBuilderAPI_MakeFace(const gp_Cylinder& C); |
83 | |
84 | //! Make a face from a cone. |
85 | Standard_EXPORT BRepBuilderAPI_MakeFace(const gp_Cone& C); |
86 | |
87 | //! Make a face from a sphere. |
88 | Standard_EXPORT BRepBuilderAPI_MakeFace(const gp_Sphere& S); |
89 | |
90 | //! Make a face from a torus. |
91 | Standard_EXPORT BRepBuilderAPI_MakeFace(const gp_Torus& C); |
92 | |
93 | //! Make a face from a Surface. Accepts tolerance value (TolDegen) |
94 | //! for resolution of degenerated edges. |
95 | Standard_EXPORT BRepBuilderAPI_MakeFace(const Handle(Geom_Surface)& S, const Standard_Real TolDegen); |
96 | |
97 | //! Make a face from a plane. |
98 | Standard_EXPORT BRepBuilderAPI_MakeFace(const gp_Pln& P, const Standard_Real UMin, const Standard_Real UMax, const Standard_Real VMin, const Standard_Real VMax); |
99 | |
100 | //! Make a face from a cylinder. |
101 | Standard_EXPORT BRepBuilderAPI_MakeFace(const gp_Cylinder& C, const Standard_Real UMin, const Standard_Real UMax, const Standard_Real VMin, const Standard_Real VMax); |
102 | |
103 | //! Make a face from a cone. |
104 | Standard_EXPORT BRepBuilderAPI_MakeFace(const gp_Cone& C, const Standard_Real UMin, const Standard_Real UMax, const Standard_Real VMin, const Standard_Real VMax); |
105 | |
106 | //! Make a face from a sphere. |
107 | Standard_EXPORT BRepBuilderAPI_MakeFace(const gp_Sphere& S, const Standard_Real UMin, const Standard_Real UMax, const Standard_Real VMin, const Standard_Real VMax); |
108 | |
109 | //! Make a face from a torus. |
110 | Standard_EXPORT BRepBuilderAPI_MakeFace(const gp_Torus& C, const Standard_Real UMin, const Standard_Real UMax, const Standard_Real VMin, const Standard_Real VMax); |
111 | |
112 | //! Make a face from a Surface. Accepts tolerance value (TolDegen) |
113 | //! for resolution of degenerated edges. |
114 | Standard_EXPORT BRepBuilderAPI_MakeFace(const Handle(Geom_Surface)& S, const Standard_Real UMin, const Standard_Real UMax, const Standard_Real VMin, const Standard_Real VMax, const Standard_Real TolDegen); |
115 | |
116 | //! Find a surface from the wire and make a face. |
117 | //! if <OnlyPlane> is true, the computed surface will be |
118 | //! a plane. If it is not possible to find a plane, the |
119 | //! flag NotDone will be set. |
120 | Standard_EXPORT BRepBuilderAPI_MakeFace(const TopoDS_Wire& W, const Standard_Boolean OnlyPlane = Standard_False); |
121 | |
122 | //! Make a face from a plane and a wire. |
123 | Standard_EXPORT BRepBuilderAPI_MakeFace(const gp_Pln& P, const TopoDS_Wire& W, const Standard_Boolean Inside = Standard_True); |
124 | |
125 | //! Make a face from a cylinder and a wire. |
126 | Standard_EXPORT BRepBuilderAPI_MakeFace(const gp_Cylinder& C, const TopoDS_Wire& W, const Standard_Boolean Inside = Standard_True); |
127 | |
128 | //! Make a face from a cone and a wire. |
129 | Standard_EXPORT BRepBuilderAPI_MakeFace(const gp_Cone& C, const TopoDS_Wire& W, const Standard_Boolean Inside = Standard_True); |
130 | |
131 | //! Make a face from a sphere and a wire. |
132 | Standard_EXPORT BRepBuilderAPI_MakeFace(const gp_Sphere& S, const TopoDS_Wire& W, const Standard_Boolean Inside = Standard_True); |
133 | |
134 | //! Make a face from a torus and a wire. |
135 | Standard_EXPORT BRepBuilderAPI_MakeFace(const gp_Torus& C, const TopoDS_Wire& W, const Standard_Boolean Inside = Standard_True); |
136 | |
137 | //! Make a face from a Surface and a wire. |
138 | Standard_EXPORT BRepBuilderAPI_MakeFace(const Handle(Geom_Surface)& S, const TopoDS_Wire& W, const Standard_Boolean Inside = Standard_True); |
139 | |
140 | //! Adds the wire <W> in the face <F> |
141 | //! A general method to create a face is to give |
142 | //! - a surface S as the support (the geometric domain) of the face, |
143 | //! - and a wire W to bound it. |
144 | //! The bounds of the face can also be defined by four parameter values |
145 | //! umin, umax, vmin, vmax which determine isoparametric limitations on |
146 | //! the parametric space of the surface. In this way, a patch is |
147 | //! defined. The parameter values are optional. If they are omitted, the |
148 | //! natural bounds of the surface are used. A wire is automatically |
149 | //! built using the defined bounds. Up to four edges and four vertices |
150 | //! are created with this wire (no edge is created when the |
151 | //! corresponding parameter value is infinite). |
152 | //! Wires can then be added using the function Add to define other |
153 | //! restrictions on the face. These restrictions represent holes. More |
154 | //! than one wire may be added by this way, provided that the wires do |
155 | //! not cross each other and that they define only one area on the |
156 | //! surface. (Be careful, however, as this is not checked). |
157 | //! Forbidden addition of wires |
158 | //! Note that in this schema, the third case is valid if edges of the |
159 | //! wire W are declared internal to the face. As a result, these edges |
160 | //! are no longer bounds of the face. |
161 | //! A default tolerance (Precision::Confusion()) is given to the face, |
162 | //! this tolerance may be increased during construction of the face |
163 | //! using various algorithms. |
164 | //! Rules applied to the arguments |
165 | //! For the surface: |
166 | //! - The surface must not be a 'null handle'. |
167 | //! - If the surface is a trimmed surface, the basis surface is used. |
168 | //! - For the wire: the wire is composed of connected edges, each |
169 | //! edge having a parametric curve description in the parametric |
170 | //! domain of the surface; in other words, as a pcurve. |
171 | //! For the parameters: |
172 | //! - The parameter values must be in the parametric range of the |
173 | //! surface (or the basis surface, if the surface is trimmed). If this |
174 | //! condition is not satisfied, the face is not built, and the Error |
175 | //! function will return BRepBuilderAPI_ParametersOutOfRange. |
176 | //! - The bounding parameters p1 and p2 are adjusted on a periodic |
177 | //! surface in a given parametric direction by adding or subtracting |
178 | //! the period to obtain p1 in the parametric range of the surface and |
179 | //! such p2, that p2 - p1 <= Period, where Period is the period of the |
180 | //! surface in this parametric direction. |
181 | //! - A parameter value may be infinite. There will be no edge and |
182 | //! no vertex in the corresponding direction. |
183 | Standard_EXPORT BRepBuilderAPI_MakeFace(const TopoDS_Face& F, const TopoDS_Wire& W); |
184 | |
185 | //! Initializes (or reinitializes) the |
186 | //! construction of a face by creating a new object which is a copy of |
187 | //! the face F, in order to add wires to it, using the function Add. |
188 | //! Note: this complete copy of the geometry is only required if you |
189 | //! want to work on the geometries of the two faces independently. |
190 | Standard_EXPORT void Init (const TopoDS_Face& F); |
191 | |
192 | //! Initializes (or reinitializes) the construction of a face on |
193 | //! the surface S. If Bound is true, a wire is |
194 | //! automatically created from the natural bounds of the |
195 | //! surface S and added to the face in order to bound it. If |
196 | //! Bound is false, no wire is added. This option is used |
197 | //! when real bounds are known. These will be added to |
198 | //! the face after this initialization, using the function Add. |
199 | //! TolDegen parameter is used for resolution of degenerated edges |
200 | //! if calculation of natural bounds is turned on. |
201 | Standard_EXPORT void Init (const Handle(Geom_Surface)& S, const Standard_Boolean Bound, const Standard_Real TolDegen); |
202 | |
203 | //! Initializes (or reinitializes) the construction of a face on |
204 | //! the surface S, limited in the u parametric direction by |
205 | //! the two parameter values UMin and UMax and in the |
206 | //! v parametric direction by the two parameter values VMin and VMax. |
207 | //! Warning |
208 | //! Error returns: |
209 | //! - BRepBuilderAPI_ParametersOutOfRange |
210 | //! when the parameters given are outside the bounds of the |
211 | //! surface or the basis surface of a trimmed surface. |
212 | //! TolDegen parameter is used for resolution of degenerated edges. |
213 | Standard_EXPORT void Init (const Handle(Geom_Surface)& S, const Standard_Real UMin, const Standard_Real UMax, const Standard_Real VMin, const Standard_Real VMax, const Standard_Real TolDegen); |
214 | |
215 | //! Adds the wire W to the constructed face as a hole. |
216 | //! Warning |
217 | //! W must not cross the other bounds of the face, and all |
218 | //! the bounds must define only one area on the surface. |
219 | //! (Be careful, however, as this is not checked.) |
220 | //! Example |
221 | //! // a cylinder |
222 | //! gp_Cylinder C = ..; |
223 | //! // a wire |
224 | //! TopoDS_Wire W = ...; |
225 | //! BRepBuilderAPI_MakeFace MF(C); |
226 | //! MF.Add(W); |
227 | //! TopoDS_Face F = MF; |
228 | Standard_EXPORT void Add (const TopoDS_Wire& W); |
229 | |
230 | //! Returns true if this algorithm has a valid face. |
231 | Standard_EXPORT virtual Standard_Boolean IsDone() const Standard_OVERRIDE; |
232 | |
233 | //! Returns the construction status |
234 | //! BRepBuilderAPI_FaceDone if the face is built, or |
235 | //! - another value of the BRepBuilderAPI_FaceError |
236 | //! enumeration indicating why the construction failed, in |
237 | //! particular when the given parameters are outside the |
238 | //! bounds of the surface. |
239 | Standard_EXPORT BRepBuilderAPI_FaceError Error() const; |
240 | |
241 | //! Returns the constructed face. |
242 | //! Exceptions |
243 | //! StdFail_NotDone if no face is built. |
244 | Standard_EXPORT const TopoDS_Face& Face() const; |
245 | Standard_EXPORT operator TopoDS_Face() const; |
246 | |
247 | |
248 | |
249 | |
250 | protected: |
251 | |
252 | |
253 | |
254 | |
255 | |
256 | private: |
257 | |
258 | |
259 | |
260 | BRepLib_MakeFace myMakeFace; |
261 | |
262 | |
263 | }; |
264 | |
265 | |
266 | |
267 | |
268 | |
269 | |
270 | |
271 | #endif // _BRepBuilderAPI_MakeFace_HeaderFile |