0024428: Implementation of LGPL license
[occt.git] / src / BRepExtrema / BRepExtrema_DistanceSS.hxx
1 // Copyright (c) 1999-2014 OPEN CASCADE SAS
2 //
3 // This file is part of Open CASCADE Technology software library.
4 //
5 // This library is free software; you can redistribute it and / or modify it
6 // under the terms of the GNU Lesser General Public version 2.1 as published
7 // by the Free Software Foundation, with special exception defined in the file
8 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
9 // distribution for complete text of the license and disclaimer of any warranty.
10 //
11 // Alternatively, this file may be used under the terms of Open CASCADE
12 // commercial license or contractual agreement.
13
14 #ifndef _BRepExtrema_DistanceSS_HeaderFile
15 #define _BRepExtrema_DistanceSS_HeaderFile
16
17 #ifndef _Standard_HeaderFile
18 #include <Standard.hxx>
19 #endif
20 #ifndef _Standard_DefineAlloc_HeaderFile
21 #include <Standard_DefineAlloc.hxx>
22 #endif
23 #ifndef _Standard_Macro_HeaderFile
24 #include <Standard_Macro.hxx>
25 #endif
26
27 #ifndef _BRepExtrema_SeqOfSolution_HeaderFile
28 #include <BRepExtrema_SeqOfSolution.hxx>
29 #endif
30 #ifndef _Standard_Real_HeaderFile
31 #include <Standard_Real.hxx>
32 #endif
33 #ifndef _Standard_Boolean_HeaderFile
34 #include <Standard_Boolean.hxx>
35 #endif
36 #ifndef _Extrema_ExtFlag_HeaderFile
37 #include <Extrema_ExtFlag.hxx>
38 #endif
39 #ifndef _Extrema_ExtAlgo_HeaderFile
40 #include <Extrema_ExtAlgo.hxx>
41 #endif
42 #ifndef _Precision_HeaderFile
43 #include <Precision.hxx>
44 #endif
45 class TopoDS_Shape;
46 class Bnd_Box;
47 class TopoDS_Vertex;
48 class TopoDS_Edge;
49 class TopoDS_Face;
50
51
52 //!  This class allows to compute minimum distance between two shapes <br>
53 //! (face edge vertex) and is used in DistShapeShape class. <br>
54 class BRepExtrema_DistanceSS
55 {
56  public:
57
58   DEFINE_STANDARD_ALLOC
59
60   //! computes the distance between two Shapes ( face edge vertex). <br>
61   Standard_EXPORT BRepExtrema_DistanceSS(const TopoDS_Shape& S1, const TopoDS_Shape& S2,
62                                          const Bnd_Box& B1, const Bnd_Box& B2,
63                                          const Standard_Real DstRef,
64                                          const Extrema_ExtFlag F = Extrema_ExtFlag_MINMAX,
65                                          const Extrema_ExtAlgo A = Extrema_ExtAlgo_Grad)
66   : myDstRef(DstRef), myModif(Standard_False), myEps(Precision::Confusion()), myFlag(F), myAlgo(A)
67   {
68     Perform(S1, S2, B1, B2);
69   }
70   //! computes the distance between two Shapes ( face edge vertex). <br>
71   //! Parameter theDeflection is used to specify a maximum deviation <br>
72   //! of extreme distances from the minimum one. <br>
73   //! Default value is Precision::Confusion(). <br>
74   Standard_EXPORT BRepExtrema_DistanceSS(const TopoDS_Shape& S1, const TopoDS_Shape& S2,
75                                          const Bnd_Box& B1, const Bnd_Box& B2,
76                                          const Standard_Real DstRef, const Standard_Real aDeflection,
77                                          const Extrema_ExtFlag F = Extrema_ExtFlag_MINMAX,
78                                          const Extrema_ExtAlgo A = Extrema_ExtAlgo_Grad)
79   : myDstRef(DstRef), myModif(Standard_False), myEps(aDeflection), myFlag(F), myAlgo(A)
80   {
81     Perform(S1, S2, B1, B2);
82   }
83   //! True if the distance has been computed <br>
84   Standard_EXPORT Standard_Boolean IsDone() const
85   {
86     return myModif;
87   }
88   //! returns the distance value <br>
89   Standard_EXPORT Standard_Real DistValue() const
90   {
91     return myDstRef;
92   }
93   //! returns the list of solutions on the first shape <br>
94   Standard_EXPORT const BRepExtrema_SeqOfSolution& Seq1Value() const
95   {
96     return SeqSolShape1;
97   }
98   //! returns the list of solutions on the second shape <br>
99   Standard_EXPORT const BRepExtrema_SeqOfSolution& Seq2Value() const
100   {
101     return SeqSolShape2;
102   }
103   //! sets the flag controlling minimum and maximum search
104   Standard_EXPORT void SetFlag(const Extrema_ExtFlag F)
105   {
106     myFlag = F;
107   }
108   //! sets the flag controlling ...
109   Standard_EXPORT void SetAlgo(const Extrema_ExtAlgo A)
110   {
111     myAlgo = A;
112   }
113
114  private:
115
116   //! computes the distance between two Shapes ( face edge vertex) <br>
117   Standard_EXPORT void Perform(const TopoDS_Shape& S1,const TopoDS_Shape& S2,const Bnd_Box& B1,const Bnd_Box& B2);
118
119   //! computes the distance between two vertices <br>
120   void Perform(const TopoDS_Vertex& S1,const TopoDS_Vertex& S2);
121   //! computes the minimum distance between a vertex and an edge <br>
122   void Perform(const TopoDS_Vertex& S1,const TopoDS_Edge& S2,const Bnd_Box& B1,const Bnd_Box& B2);
123   //! computes the minimum distance between a vertex and a face <br>
124   void Perform(const TopoDS_Vertex& S1,const TopoDS_Face& S2,const Bnd_Box& B1,const Bnd_Box& B2);
125
126   //! computes the minimum distance between an edge and a vertex <br>
127   void Perform(const TopoDS_Edge& S1,const TopoDS_Vertex& S2,const Bnd_Box& B1,const Bnd_Box& B2);
128   /*{
129     Perform(S2, S1, B2, B1);
130   }*/
131   //! computes the minimum distance between two edges <br>
132   void Perform(const TopoDS_Edge& S1,const TopoDS_Edge& S2,const Bnd_Box& B1,const Bnd_Box& B2);
133   //! computes the minimum distance an edge and a face <br>
134   void Perform(const TopoDS_Edge& S1,const TopoDS_Face& S2,const Bnd_Box& B1,const Bnd_Box& B2);
135
136   //! computes the minimum distance betwwen a face and a vertex <br>
137   void Perform(const TopoDS_Face& S1,const TopoDS_Vertex& S2,const Bnd_Box& B1,const Bnd_Box& B2);
138   /*{
139     Perform(S2, S1, B2, B1);
140   }*/
141   //! computes the minimum distance between a face and an edge <br>
142   void Perform(const TopoDS_Face& S1,const TopoDS_Edge& S2,const Bnd_Box& B1,const Bnd_Box& B2);
143   /*{
144     Perform(S2, S1, B2, B1);
145   }*/
146   //! computes the minimum distance between two faces <br>
147   void Perform(const TopoDS_Face& S1,const TopoDS_Face& S2,const Bnd_Box& B1,const Bnd_Box& B2);
148
149   BRepExtrema_SeqOfSolution SeqSolShape1;
150   BRepExtrema_SeqOfSolution SeqSolShape2;
151   Standard_Real myDstRef;
152   Standard_Boolean myModif;
153   Standard_Real myEps;
154   Extrema_ExtFlag myFlag;
155   Extrema_ExtAlgo myAlgo;
156 };
157
158 #endif