OCC22322 Improvement of Extrema performance
[occt.git] / src / BRepExtrema / BRepExtrema_ExtPF.hxx
1 // File generated by CPPExt (Value)
2 //
3 //                     Copyright (C) 1991 - 2000 by  
4 //                      Matra Datavision SA.  All rights reserved.
5 //  
6 //                     Copyright (C) 2001 - 2004 by
7 //                     Open CASCADE SA.  All rights reserved.
8 // 
9 // This file is part of the Open CASCADE Technology software.
10 //
11 // This software may be distributed and/or modified under the terms and
12 // conditions of the Open CASCADE Public License as defined by Open CASCADE SA
13 // and appearing in the file LICENSE included in the packaging of this file.
14 //  
15 // This software is distributed on an "AS IS" basis, without warranty of any
16 // kind, and Open CASCADE SA hereby disclaims all such warranties,
17 // including without limitation, any warranties of merchantability, fitness
18 // for a particular purpose or non-infringement. Please see the License for
19 // the specific terms and conditions governing rights and limitations under the
20 // License.
21
22 #ifndef _BRepExtrema_ExtPF_HeaderFile
23 #define _BRepExtrema_ExtPF_HeaderFile
24
25 #ifndef _Standard_HeaderFile
26 #include <Standard.hxx>
27 #endif
28 #ifndef _Standard_Macro_HeaderFile
29 #include <Standard_Macro.hxx>
30 #endif
31
32 #ifndef _Extrema_ExtPS_HeaderFile
33 #include <Extrema_ExtPS.hxx>
34 #endif
35 #ifndef _Standard_Integer_HeaderFile
36 #include <Standard_Integer.hxx>
37 #endif
38 #ifndef _TColStd_SequenceOfReal_HeaderFile
39 #include <TColStd_SequenceOfReal.hxx>
40 #endif
41 #ifndef _Extrema_SequenceOfPOnSurf_HeaderFile
42 #include <Extrema_SequenceOfPOnSurf.hxx>
43 #endif
44 #ifndef _BRepAdaptor_Surface_HeaderFile
45 #include <BRepAdaptor_Surface.hxx>
46 #endif
47 #ifndef _Extrema_ExtFlag_HeaderFile
48 #include <Extrema_ExtFlag.hxx>
49 #endif
50 #ifndef _Extrema_ExtAlgo_HeaderFile
51 #include <Extrema_ExtAlgo.hxx>
52 #endif
53 #ifndef _Standard_Boolean_HeaderFile
54 #include <Standard_Boolean.hxx>
55 #endif
56 #ifndef _Standard_Real_HeaderFile
57 #include <Standard_Real.hxx>
58 #endif
59 class TopoDS_Vertex;
60 class TopoDS_Face;
61 class gp_Pnt;
62
63
64 class BRepExtrema_ExtPF
65 {
66  public:
67
68   void* operator new(size_t,void* anAddress) 
69   {
70     return anAddress;
71   }
72   void* operator new(size_t size) 
73   {
74     return Standard::Allocate(size); 
75   }
76   void  operator delete(void *anAddress) 
77   {
78     if (anAddress) Standard::Free((Standard_Address&)anAddress); 
79   }
80
81   Standard_EXPORT BRepExtrema_ExtPF()
82   {}
83   //! It calculates all the distances. <br>
84   Standard_EXPORT BRepExtrema_ExtPF(const TopoDS_Vertex& TheVertex,const TopoDS_Face& TheFace,
85                                     const Extrema_ExtFlag TheFlag = Extrema_ExtFlag_MINMAX,
86                                     const Extrema_ExtAlgo TheAlgo = Extrema_ExtAlgo_Grad);
87   
88   Standard_EXPORT void Initialize(const TopoDS_Face& TheFace,
89                                   const Extrema_ExtFlag TheFlag = Extrema_ExtFlag_MINMAX,
90                                   const Extrema_ExtAlgo TheAlgo = Extrema_ExtAlgo_Grad);
91
92   //! An exception is raised if the fields have not been initialized. <br>
93   //! Be careful: this method uses the Face only for classify not for the fields. <br>
94   Standard_EXPORT void Perform(const TopoDS_Vertex& TheVertex,const TopoDS_Face& TheFace);
95   //! True if the distances are found. <br>
96   Standard_EXPORT Standard_Boolean IsDone() const
97   {
98     return myExtPS.IsDone();
99   }
100   //! Returns the number of extremum distances. <br>
101   Standard_EXPORT Standard_Integer NbExt() const
102   {
103     return myPoints.Length();
104   }
105   //! Returns the value of the <N>th extremum square distance. <br>
106   Standard_EXPORT Standard_Real SquareDistance(const Standard_Integer N) const
107   {
108     return mySqDist.Value(N);
109   }
110   //! Returns the parameters on the Face of the <N>th extremum distance. <br>
111   Standard_EXPORT void Parameter(const Standard_Integer N,Standard_Real& U,Standard_Real& V) const
112   {
113     myPoints.Value(N).Parameter(U, V);
114   }
115   //! Returns the Point of the <N>th extremum distance. <br>
116   Standard_EXPORT gp_Pnt Point(const Standard_Integer N) const
117   {
118     return myPoints.Value(N).Value();
119   }
120
121   Standard_EXPORT void SetFlag(const Extrema_ExtFlag F)
122   {
123     myExtPS.SetFlag(F);
124   }
125
126   Standard_EXPORT void SetAlgo(const Extrema_ExtAlgo A)
127   {
128     myExtPS.SetAlgo(A);
129   }
130
131  private:
132
133   Extrema_ExtPS myExtPS;
134   TColStd_SequenceOfReal mySqDist;
135   Extrema_SequenceOfPOnSurf myPoints;
136   BRepAdaptor_Surface mySurf;
137 };
138
139 #endif