0026323: Tolerance computing unification
[occt.git] / src / IntTools / IntTools_EdgeFace.hxx
1 // Created on: 2001-02-26
2 // Created by: Peter KURNEV
3 // Copyright (c) 2001-2014 OPEN CASCADE SAS
4 //
5 // This file is part of Open CASCADE Technology software library.
6 //
7 // This library is free software; you can redistribute it and/or modify it under
8 // the terms of the GNU Lesser General Public License version 2.1 as published
9 // by the Free Software Foundation, with special exception defined in the file
10 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
11 // distribution for complete text of the license and disclaimer of any warranty.
12 //
13 // Alternatively, this file may be used under the terms of Open CASCADE
14 // commercial license or contractual agreement.
15
16 #ifndef _IntTools_EdgeFace_HeaderFile
17 #define _IntTools_EdgeFace_HeaderFile
18
19 #include <Standard.hxx>
20 #include <Standard_DefineAlloc.hxx>
21 #include <Standard_Handle.hxx>
22
23 #include <TopoDS_Edge.hxx>
24 #include <TopoDS_Face.hxx>
25 #include <Standard_Real.hxx>
26 #include <Standard_Integer.hxx>
27 #include <BRepAdaptor_Curve.hxx>
28 #include <BRepAdaptor_Surface.hxx>
29 #include <Standard_Boolean.hxx>
30 #include <IntTools_SequenceOfRanges.hxx>
31 #include <IntTools_FClass2d.hxx>
32 #include <IntTools_CArray1OfReal.hxx>
33 #include <IntTools_SequenceOfRoots.hxx>
34 #include <IntTools_SequenceOfCommonPrts.hxx>
35 #include <IntTools_Range.hxx>
36 class IntTools_Context;
37 class TopoDS_Edge;
38 class TopoDS_Face;
39 class IntTools_Range;
40 class gp_Pnt;
41 class BRepAdaptor_Surface;
42 class IntTools_CArray1OfReal;
43 class IntTools_CommonPrt;
44
45
46 //! The  class  provides  Edge/Face  algorithm  to  determine
47 //! common  parts  between edge and face in  3-d space.
48 //! Common  parts can be :  Vertices  or Edges.
49 class IntTools_EdgeFace 
50 {
51 public:
52
53   DEFINE_STANDARD_ALLOC
54
55   
56
57   //! Empty Constructor
58   Standard_EXPORT IntTools_EdgeFace();
59   
60
61   //! Initializes algorithm by the edge anEdge
62   Standard_EXPORT void SetEdge (const TopoDS_Edge& anEdge);
63   
64
65   //! Initializes algorithm by edge tolerance
66   Standard_EXPORT void SetTolE (const Standard_Real aTolEdge1);
67   
68
69   //! Initializes algorithm by the face aFace
70   Standard_EXPORT void SetFace (const TopoDS_Face& aFace);
71   
72
73   //! Initializes algorithm by face tolerance
74   Standard_EXPORT void SetTolF (const Standard_Real aTolFace);
75   
76
77   //! Returns edge
78   Standard_EXPORT const TopoDS_Edge& Edge() const;
79   
80
81   //! Returns face
82   Standard_EXPORT const TopoDS_Face& Face() const;
83   
84
85   //! Returns  tolerance of the edge
86   Standard_EXPORT Standard_Real TolE() const;
87   
88
89   //! Returns  tolerance of the face
90   Standard_EXPORT Standard_Real TolF() const;
91   
92
93   //! Initializes algorithm by discretization value
94   Standard_EXPORT void SetDiscretize (const Standard_Integer aDiscret);
95   
96
97   //! Initializes algorithm by deflection value
98   Standard_EXPORT void SetDeflection (const Standard_Real aDeflection);
99   
100
101   //! Initializes algorithm by parameter tolerance
102   Standard_EXPORT void SetEpsilonT (const Standard_Real anEpsT);
103   
104
105   //! Initializes algorithm by distance tolerance
106   Standard_EXPORT void SetEpsilonNull (const Standard_Real anEpsNull);
107   
108
109   //! Sets boundaries for edge.
110   //! The algorithm processes edge inside these boundaries.
111   Standard_EXPORT void SetRange (const IntTools_Range& aRange);
112   
113
114   //! Sets boundaries for edge.
115   //! The algorithm processes edge inside these boundaries.
116   Standard_EXPORT void SetRange (const Standard_Real aFirst, const Standard_Real aLast);
117   
118
119   //! Sets the intersecton context
120   Standard_EXPORT void SetContext (const Handle(IntTools_Context)& theContext);
121   
122
123   //! Gets the intersecton context
124   Standard_EXPORT const Handle(IntTools_Context)& Context() const;
125   
126
127   //! Launches the process
128   Standard_EXPORT void Perform();
129   
130
131   //! Returns true if computation was done
132   //! successfully, otherwise returns false
133   Standard_EXPORT Standard_Boolean IsDone() const;
134   
135
136   //! Returns code of completion
137   //! 0 - means successful completion
138   //! 1 - the process was not started
139   //! 2,3,4,5 - invalid source data for the algorithm
140   //! 6 - discretization failed
141   //! 7 - no projectable ranges found
142   //! 11 - distance computing error
143   Standard_EXPORT Standard_Integer ErrorStatus() const;
144   
145
146   //! Returns results
147   Standard_EXPORT const IntTools_SequenceOfCommonPrts& CommonParts() const;
148   
149
150   //! Returns boundaries for edge
151   Standard_EXPORT const IntTools_Range& Range() const;
152   
153   Standard_EXPORT static Standard_Boolean IsEqDistance (const gp_Pnt& aP, const BRepAdaptor_Surface& aS, const Standard_Real aT, Standard_Real& aD);
154
155
156
157
158 protected:
159
160   
161   Standard_EXPORT void CheckData();
162   
163   Standard_EXPORT void Prepare();
164   
165   Standard_EXPORT Standard_Boolean IsProjectable (const Standard_Real t) const;
166   
167   Standard_EXPORT void FindProjectableRoot (const Standard_Real t1, const Standard_Real t2, const Standard_Integer f1, const Standard_Integer f2, Standard_Real& tRoot);
168   
169   Standard_EXPORT Standard_Real DistanceFunction (const Standard_Real t);
170   
171   Standard_EXPORT Standard_Real DerivativeFunction (const Standard_Real t);
172   
173   Standard_EXPORT void PrepareArgsFuncArrays (const Standard_Real t1, const Standard_Real t2);
174   
175   Standard_EXPORT void AddDerivativePoints (const IntTools_CArray1OfReal& t, const IntTools_CArray1OfReal& f);
176   
177   Standard_EXPORT Standard_Real FindSimpleRoot (const Standard_Integer IP, const Standard_Real ta, const Standard_Real tb, const Standard_Real fA);
178   
179   Standard_EXPORT Standard_Real FindGoldRoot (const Standard_Real ta, const Standard_Real tb, const Standard_Real coeff);
180   
181   Standard_EXPORT Standard_Integer MakeType (IntTools_CommonPrt& aCP);
182   
183   Standard_EXPORT void IsIntersection (const Standard_Real ta, const Standard_Real tb);
184   
185   Standard_EXPORT void FindDerivativeRoot (const IntTools_CArray1OfReal& t, const IntTools_CArray1OfReal& f);
186   
187   Standard_EXPORT void RemoveIdenticalRoots();
188   
189   Standard_EXPORT Standard_Boolean CheckTouch (const IntTools_CommonPrt& aCP, Standard_Real& aTX);
190   
191   Standard_EXPORT Standard_Boolean CheckTouchVertex (const IntTools_CommonPrt& aCP, Standard_Real& aTX);
192
193
194
195
196 private:
197
198
199
200   TopoDS_Edge myEdge;
201   TopoDS_Face myFace;
202   Standard_Real myTolE;
203   Standard_Real myTolF;
204   Standard_Integer myDiscret;
205   Standard_Real myEpsT;
206   Standard_Real myEpsNull;
207   Standard_Real myDeflection;
208   BRepAdaptor_Curve myC;
209   Standard_Real myTmin;
210   Standard_Real myTmax;
211   BRepAdaptor_Surface myS;
212   Standard_Real myCriteria;
213   Standard_Boolean myIsDone;
214   Standard_Integer myErrorStatus;
215   Handle(IntTools_Context) myContext;
216   IntTools_SequenceOfRanges myProjectableRanges;
217   IntTools_FClass2d myFClass2d;
218   IntTools_CArray1OfReal myFuncArray;
219   IntTools_CArray1OfReal myArgsArray;
220   IntTools_SequenceOfRoots mySequenceOfRoots;
221   IntTools_SequenceOfCommonPrts mySeqOfCommonPrts;
222   Standard_Real myPar1;
223   Standard_Boolean myParallel;
224   IntTools_Range myRange;
225
226
227 };
228
229
230
231
232
233
234
235 #endif // _IntTools_EdgeFace_HeaderFile