1 // Created on: 1995-08-31
2 // Created by: Remi LEQUETTE
3 // Copyright (c) 1995-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 _BRepFilletAPI_MakeFillet2d_HeaderFile
18 #define _BRepFilletAPI_MakeFillet2d_HeaderFile
20 #include <Standard.hxx>
21 #include <Standard_DefineAlloc.hxx>
22 #include <Standard_Handle.hxx>
24 #include <ChFi2d_Builder.hxx>
25 #include <BRepBuilderAPI_MakeShape.hxx>
26 #include <Standard_Real.hxx>
27 #include <Standard_Boolean.hxx>
28 #include <TopTools_SequenceOfShape.hxx>
29 #include <Standard_Integer.hxx>
30 #include <TopTools_ListOfShape.hxx>
31 #include <ChFi2d_ConstructionError.hxx>
38 //! Describes functions to build fillets and chamfers on the
39 //! vertices of a planar face.
40 //! Fillets and Chamfers on the Vertices of a Planar Face
41 //! A MakeFillet2d object provides a framework for:
42 //! - initializing the construction algorithm with a given face,
43 //! - acquiring the data characterizing the fillets and chamfers,
44 //! - building the fillets and chamfers, and constructing the
45 //! resulting shape, and
46 //! - consulting the result.
48 //! Only segments of straight lines and arcs of circles are
49 //! treated. BSplines are not processed.
50 class BRepFilletAPI_MakeFillet2d : public BRepBuilderAPI_MakeShape
57 //! Initializes an empty algorithm for computing fillets and
58 //! chamfers. The face on which the fillets and
59 //! chamfers are built is defined using the Init function.
60 //! The vertices on which fillets or chamfers are built are
61 //! defined using the AddFillet or AddChamfer function.
63 //! The status of the initialization, as given by the Status
64 //! function, can be one of the following:
65 //! - ChFi2d_Ready if the initialization is correct,
66 //! - ChFi2d_NotPlanar if F is not planar,
67 //! - ChFi2d_NoFace if F is a null face.
68 Standard_EXPORT BRepFilletAPI_MakeFillet2d();
70 //! Initializes an algorithm for computing fillets and chamfers on the face F.
71 //! The vertices on which fillets or chamfers are built are
72 //! defined using the AddFillet or AddChamfer function.
74 //! The status of the initialization, as given by the Status
75 //! function, can be one of the following:
76 //! - ChFi2d_Ready if the initialization is correct,
77 //! - ChFi2d_NotPlanar if F is not planar,
78 //! - ChFi2d_NoFace if F is a null face.
79 Standard_EXPORT BRepFilletAPI_MakeFillet2d(const TopoDS_Face& F);
81 //! Initializes this algorithm for constructing fillets or
82 //! chamfers with the face F.
84 //! The status of the initialization, as given by the Status
85 //! function, can be one of the following:
86 //! - ChFi2d_Ready if the initialization is correct,
87 //! - ChFi2d_NotPlanar if F is not planar,
88 //! - ChFi2d_NoFace if F is a null face.
89 Standard_EXPORT void Init (const TopoDS_Face& F);
91 //! This initialize method allow to init the builder
92 //! from a face <RefFace> and another face <ModFace>
93 //! which derive from <RefFace>. This is usefull to
94 //! modify a fillet or a chamfer already created on
96 Standard_EXPORT void Init (const TopoDS_Face& RefFace, const TopoDS_Face& ModFace);
98 //! Adds a fillet of radius Radius between the two edges
99 //! adjacent to the vertex V on the face modified by this
100 //! algorithm. The two edges do not need to be rectilinear.
101 //! This function returns the fillet and builds the resulting face.
103 //! The status of the construction, as given by the Status
104 //! function, can be one of the following:
105 //! - ChFi2d_IsDone if the fillet is built,
106 //! - ChFi2d_ConnexionError if V does not belong to the initial face,
107 //! - ChFi2d_ComputationError if Radius is too large
108 //! to build a fillet between the two adjacent edges,
109 //! - ChFi2d_NotAuthorized
110 //! - if one of the two edges connected to V is a fillet or chamfer, or
111 //! - if a curve other than a straight line or an arc of a
112 //! circle is used as E, E1 or E2.
113 //! Do not use the returned fillet if the status of the construction is not ChFi2d_IsDone.
115 //! Standard_NegativeValue if Radius is less than or equal to zero.
116 Standard_EXPORT TopoDS_Edge AddFillet (const TopoDS_Vertex& V, const Standard_Real Radius);
118 //! Assigns the radius Radius to the fillet Fillet already
119 //! built on the face modified by this algorithm.
120 //! This function returns the new fillet and modifies the existing face.
122 //! The status of the construction, as given by the Status
123 //! function, can be one of the following:
124 //! - ChFi2d_IsDone if the new fillet is built,
125 //! - ChFi2d_ConnexionError if Fillet does not
126 //! belong to the existing face,
127 //! - ChFi2d_ComputationError if Radius is too
128 //! large to build a fillet between the two adjacent edges.
129 //! Do not use the returned fillet if the status of the
130 //! construction is not ChFi2d_IsDone.
132 //! Standard_NegativeValue if Radius is less than or equal to zero.
133 Standard_EXPORT TopoDS_Edge ModifyFillet (const TopoDS_Edge& Fillet, const Standard_Real Radius);
135 //! Removes the fillet Fillet already built on the face
136 //! modified by this algorithm.
137 //! This function returns the vertex connecting the two
138 //! adjacent edges of Fillet and modifies the existing face.
140 //! - The returned vertex is only valid if the Status
141 //! function returns ChFi2d_IsDone.
142 //! - A null vertex is returned if the edge Fillet does not
143 //! belong to the initial face.
144 Standard_EXPORT TopoDS_Vertex RemoveFillet (const TopoDS_Edge& Fillet);
146 //! Adds a chamfer on the face modified by this algorithm
147 //! between the two adjacent edges E1 and E2, where
148 //! the extremities of the chamfer are on E1 and E2 at
149 //! distances D1 and D2 respectively
150 //! In cases where the edges are not rectilinear, distances
151 //! are measured using the curvilinear abscissa of the
152 //! edges and the angle is measured with respect to the
153 //! tangent at the corresponding point.
154 //! The angle Ang is given in radians.
155 //! This function returns the chamfer and builds the resulting face.
156 Standard_EXPORT TopoDS_Edge AddChamfer (const TopoDS_Edge& E1, const TopoDS_Edge& E2, const Standard_Real D1, const Standard_Real D2);
158 //! Adds a chamfer on the face modified by this algorithm
159 //! between the two edges connected by the vertex V,
160 //! where E is one of the two edges. The chamfer makes
161 //! an angle Ang with E and one of its extremities is on
162 //! E at distance D from V.
163 //! In cases where the edges are not rectilinear, distances
164 //! are measured using the curvilinear abscissa of the
165 //! edges and the angle is measured with respect to the
166 //! tangent at the corresponding point.
167 //! The angle Ang is given in radians.
168 //! This function returns the chamfer and builds the resulting face.
170 //! The status of the construction, as given by the Status function, can
171 //! be one of the following:
172 //! - ChFi2d_IsDone if the chamfer is built,
173 //! - ChFi2d_ParametersError if D1, D2, D or Ang is less than or equal to zero,
174 //! - ChFi2d_ConnexionError if:
175 //! - the edge E, E1 or E2 does not belong to the initial face, or
176 //! - the edges E1 and E2 are not adjacent, or
177 //! - the vertex V is not one of the limit points of the edge E,
178 //! - ChFi2d_ComputationError if the parameters of the chamfer
179 //! are too large to build a chamfer between the two adjacent edges,
180 //! - ChFi2d_NotAuthorized if:
181 //! - the edge E1, E2 or one of the two edges connected to V is a fillet or chamfer, or
182 //! - a curve other than a straight line or an arc of a circle is used as E, E1 or E2.
183 //! Do not use the returned chamfer if
184 //! the status of the construction is not ChFi2d_IsDone.
185 Standard_EXPORT TopoDS_Edge AddChamfer (const TopoDS_Edge& E, const TopoDS_Vertex& V, const Standard_Real D, const Standard_Real Ang);
187 //! Modifies the chamfer Chamfer on the face modified
188 //! by this algorithm, where:
189 //! E1 and E2 are the two adjacent edges on which
190 //! Chamfer is already built; the extremities of the new
191 //! chamfer are on E1 and E2 at distances D1 and D2 respectively.
192 Standard_EXPORT TopoDS_Edge ModifyChamfer (const TopoDS_Edge& Chamfer, const TopoDS_Edge& E1, const TopoDS_Edge& E2, const Standard_Real D1, const Standard_Real D2);
194 //! Modifies the chamfer Chamfer on the face modified
195 //! by this algorithm, where:
196 //! E is one of the two adjacent edges on which
197 //! Chamfer is already built; the new chamfer makes
198 //! an angle Ang with E and one of its extremities is
199 //! on E at distance D from the vertex on which the chamfer is built.
200 //! In cases where the edges are not rectilinear, the
201 //! distances are measured using the curvilinear abscissa
202 //! of the edges and the angle is measured with respect
203 //! to the tangent at the corresponding point.
204 //! The angle Ang is given in radians.
205 //! This function returns the new chamfer and modifies the existing face.
207 //! The status of the construction, as given by the Status
208 //! function, can be one of the following:
209 //! - ChFi2d_IsDone if the chamfer is built,
210 //! - ChFi2d_ParametersError if D1, D2, D or Ang is less than or equal to zero,
211 //! - ChFi2d_ConnexionError if:
212 //! - the edge E, E1, E2 or Chamfer does not belong
213 //! to the existing face, or
214 //! - the edges E1 and E2 are not adjacent,
215 //! - ChFi2d_ComputationError if the parameters of
216 //! the chamfer are too large to build a chamfer
217 //! between the two adjacent edges,
218 //! - ChFi2d_NotAuthorized if E1 or E2 is a fillet or chamfer.
219 //! Do not use the returned chamfer if the status of the
220 //! construction is not ChFi2d_IsDone.
221 Standard_EXPORT TopoDS_Edge ModifyChamfer (const TopoDS_Edge& Chamfer, const TopoDS_Edge& E, const Standard_Real D, const Standard_Real Ang);
223 //! Removes the chamfer Chamfer already built on the face
224 //! modified by this algorithm.
225 //! This function returns the vertex connecting the two
226 //! adjacent edges of Chamfer and modifies the existing face.
228 //! - The returned vertex is only valid if the Status
229 //! function returns ChFi2d_IsDone.
230 //! - A null vertex is returned if the edge Chamfer does
231 //! not belong to the initial face.
232 Standard_EXPORT TopoDS_Vertex RemoveChamfer (const TopoDS_Edge& Chamfer);
234 //! Returns true if the edge E on the face modified by this
235 //! algorithm is chamfered or filleted.
237 //! Returns false if E does not belong to the face modified by this algorithm.
238 Standard_Boolean IsModified (const TopoDS_Edge& E) const;
240 //! Returns the table of fillets on the face modified by this algorithm.
241 const TopTools_SequenceOfShape& FilletEdges() const;
243 //! Returns the number of fillets on the face modified by this algorithm.
244 Standard_Integer NbFillet() const;
246 //! Returns the table of chamfers on the face modified by this algorithm.
247 const TopTools_SequenceOfShape& ChamferEdges() const;
249 //! Returns the number of chamfers on the face modified by this algorithm.
250 Standard_Integer NbChamfer() const;
252 //! Returns the list of shapes modified from the shape
254 Standard_EXPORT virtual const TopTools_ListOfShape& Modified (const TopoDS_Shape& S) Standard_OVERRIDE;
256 //! returns the number of new curves
257 //! after the shape creation.
258 Standard_EXPORT Standard_Integer NbCurves() const;
260 //! Return the Edges created for curve I.
261 Standard_EXPORT const TopTools_ListOfShape& NewEdges (const Standard_Integer I);
263 Standard_Boolean HasDescendant (const TopoDS_Edge& E) const;
265 //! Returns the chamfered or filleted edge built from the
266 //! edge E on the face modified by this algorithm. If E has
267 //! not been modified, this function returns E.
269 //! Standard_NoSuchObject if the edge E does not
270 //! belong to the initial face.
271 const TopoDS_Edge& DescendantEdge (const TopoDS_Edge& E) const;
273 //! Returns the basis edge on the face modified by this
274 //! algorithm from which the chamfered or filleted edge E is
275 //! built. If E has not been modified, this function returns E.
277 //! E is returned if it does not belong to the initial face.
278 Standard_EXPORT const TopoDS_Edge& BasisEdge (const TopoDS_Edge& E) const;
280 ChFi2d_ConstructionError Status() const;
282 //! Update the result and set the Done flag
283 Standard_EXPORT virtual void Build() Standard_OVERRIDE;
298 ChFi2d_Builder myMakeChFi2d;
304 #include <BRepFilletAPI_MakeFillet2d.lxx>
310 #endif // _BRepFilletAPI_MakeFillet2d_HeaderFile