0023987: 2D fillets
[occt.git] / src / ChFi2d / ChFi2d_FilletAPI.hxx
1 // Created on: 2013-06-06
2 // Created by: Vlad ROMASHKO
3 // Copyright (c) 2003-2012 OPEN CASCADE SAS
4 //
5 // The content of this file is subject to the Open CASCADE Technology Public
6 // License Version 6.5 (the "License"). You may not use the content of this file
7 // except in compliance with the License. Please obtain a copy of the License
8 // at http://www.opencascade.org and read it completely before using this file.
9 //
10 // The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
11 // main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
12 //
13 // The Original Code and all software distributed under the License is
14 // distributed on an "AS IS" basis, without warranty of any kind, and the
15 // Initial Developer hereby disclaims all such warranties, including without
16 // limitation, any warranties of merchantability, fitness for a particular
17 // purpose or non-infringement. Please see the License for the specific terms
18 // and conditions governing the rights and limitations under the License.
19
20 #ifndef _CHFI2D_FILLETAPI_H_
21 #define _CHFI2D_FILLETAPI_H_
22
23 #include <ChFi2d_FilletAlgo.hxx>
24 #include <ChFi2d_AnaFilletAlgo.hxx>
25
26 //! An interface class for 2D fillets.
27 //! Open CASCADE provides two algorithms for 2D fillets:
28 //!     ChFi2d_Builder - it constructs a fillet or chamfer 
29 //!                      for linear and circular edges of a face.
30 //!     ChFi2d_FilletAPI - it encapsulates two algorithms:
31 //!         ChFi2d_AnaFilletAlgo - analytical constructor of the fillet.
32 //!                                It works only for linear and circular edges,
33 //!                                having a common point.
34 //!         ChFi2d_FilletAlgo - iteration recursive method constructing 
35 //!                             the fillet edge for any type of edges including
36 //!                             ellipses and b-splines. 
37 //!                             The edges may even have no common point.
38 //!
39 //! The algorithms ChFi2d_AnaFilletAlgo and ChFi2d_FilletAlgo may be used directly 
40 //! or via this ChFi2d_FilletAPI class. This class chooses an appropriate algorithm
41 //! analyzing the arguments (a wire or two edges).
42 class ChFi2d_FilletAPI
43 {
44 public:
45
46   //! An empty constructor of the fillet algorithm.
47   //! Call a method Init() to initialize the algorithm
48   //! before calling of a Perform() method.
49   Standard_EXPORT ChFi2d_FilletAPI();
50
51   //! A constructor of a fillet algorithm: accepts a wire consisting of two edges in a plane.
52   Standard_EXPORT ChFi2d_FilletAPI(const TopoDS_Wire& theWire, 
53                                    const gp_Pln& thePlane);
54
55   //! A constructor of a fillet algorithm: accepts two edges in a plane.
56   Standard_EXPORT ChFi2d_FilletAPI(const TopoDS_Edge& theEdge1, 
57                                    const TopoDS_Edge& theEdge2, 
58                                    const gp_Pln& thePlane);
59
60   //! Initializes a fillet algorithm: accepts a wire consisting of two edges in a plane.
61   Standard_EXPORT void Init(const TopoDS_Wire& theWire, 
62                             const gp_Pln& thePlane);
63
64   //! Initializes a fillet algorithm: accepts two edges in a plane.
65   Standard_EXPORT void Init(const TopoDS_Edge& theEdge1, 
66                             const TopoDS_Edge& theEdge2, 
67                             const gp_Pln& thePlane);
68
69   //! Constructs a fillet edge.
70   //! Returns true if at least one result was found.
71   Standard_EXPORT Standard_Boolean Perform(const Standard_Real theRadius);
72
73   //! Returns number of possible solutions.
74   //! <thePoint> chooses a particular fillet in case of several fillets 
75   //! may be constructed (for example, a circle intersecting a segment in 2 points).
76   //! Put the intersecting (or common) point of the edges.
77   Standard_EXPORT Standard_Integer NbResults(const gp_Pnt& thePoint);
78
79   //! Returns result (fillet edge, modified edge1, modified edge2), 
80   //! nearest to the given point <thePoint> if iSolution == -1
81   //! <thePoint> chooses a particular fillet in case of several fillets 
82   //! may be constructed (for example, a circle intersecting a segment in 2 points).
83   //! Put the intersecting (or common) point of the edges.
84   Standard_EXPORT TopoDS_Edge Result(const gp_Pnt& thePoint, 
85                                      TopoDS_Edge& theEdge1, TopoDS_Edge& theEdge2, 
86                                      const Standard_Integer iSolution = -1);
87
88 private:
89
90   // Decides whether the input parameters may use an analytical algorithm
91   // for calculation of the fillets, or an iteration-recursive method is needed.
92   // The analytical solution is applicable for linear and circular edges 
93   // having a common point.
94   Standard_Boolean IsAnalytical(const TopoDS_Edge& theEdge1, 
95                                 const TopoDS_Edge& theEdge2);
96
97   // Implementation of the fillet algorithm.
98   ChFi2d_FilletAlgo    myFilletAlgo;
99   ChFi2d_AnaFilletAlgo myAnaFilletAlgo;
100   Standard_Boolean     myIsAnalytical;
101 };
102
103 #endif // _CHFI2D_FILLETAPI_H_