1 // Created on: 2001-02-26
2 // Created by: Peter KURNEV
3 // Copyright (c) 2001-2014 OPEN CASCADE SAS
5 // This file is part of Open CASCADE Technology software library.
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.
13 // Alternatively, this file may be used under the terms of Open CASCADE
14 // commercial license or contractual agreement.
16 #ifndef _IntTools_EdgeFace_HeaderFile
17 #define _IntTools_EdgeFace_HeaderFile
19 #include <Standard.hxx>
20 #include <Standard_DefineAlloc.hxx>
21 #include <Standard_Handle.hxx>
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;
41 class BRepAdaptor_Surface;
42 class IntTools_CArray1OfReal;
43 class IntTools_CommonPrt;
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
58 Standard_EXPORT IntTools_EdgeFace();
61 //! Initializes algorithm by the edge anEdge
62 Standard_EXPORT void SetEdge (const TopoDS_Edge& anEdge);
65 //! Initializes algorithm by edge tolerance
66 Standard_EXPORT void SetTolE (const Standard_Real aTolEdge1);
69 //! Initializes algorithm by the face aFace
70 Standard_EXPORT void SetFace (const TopoDS_Face& aFace);
73 //! Initializes algorithm by face tolerance
74 Standard_EXPORT void SetTolF (const Standard_Real aTolFace);
78 Standard_EXPORT const TopoDS_Edge& Edge() const;
82 Standard_EXPORT const TopoDS_Face& Face() const;
85 //! Returns tolerance of the edge
86 Standard_EXPORT Standard_Real TolE() const;
89 //! Returns tolerance of the face
90 Standard_EXPORT Standard_Real TolF() const;
93 //! Initializes algorithm by discretization value
94 Standard_EXPORT void SetDiscretize (const Standard_Integer aDiscret);
97 //! Initializes algorithm by deflection value
98 Standard_EXPORT void SetDeflection (const Standard_Real aDeflection);
101 //! Initializes algorithm by parameter tolerance
102 Standard_EXPORT void SetEpsilonT (const Standard_Real anEpsT);
105 //! Initializes algorithm by distance tolerance
106 Standard_EXPORT void SetEpsilonNull (const Standard_Real anEpsNull);
109 //! Sets boundaries for edge.
110 //! The algorithm processes edge inside these boundaries.
111 Standard_EXPORT void SetRange (const IntTools_Range& aRange);
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);
119 //! Sets the intersecton context
120 Standard_EXPORT void SetContext (const Handle(IntTools_Context)& theContext);
123 //! Gets the intersecton context
124 Standard_EXPORT const Handle(IntTools_Context)& Context() const;
127 //! Launches the process
128 Standard_EXPORT void Perform();
131 //! Returns true if computation was done
132 //! successfully, otherwise returns false
133 Standard_EXPORT Standard_Boolean IsDone() const;
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;
147 Standard_EXPORT const IntTools_SequenceOfCommonPrts& CommonParts() const;
150 //! Returns boundaries for edge
151 Standard_EXPORT const IntTools_Range& Range() const;
153 Standard_EXPORT static Standard_Boolean IsEqDistance (const gp_Pnt& aP, const BRepAdaptor_Surface& aS, const Standard_Real aT, Standard_Real& aD);
161 Standard_EXPORT void CheckData();
163 Standard_EXPORT void Prepare();
165 Standard_EXPORT Standard_Boolean IsProjectable (const Standard_Real t) const;
167 Standard_EXPORT void FindProjectableRoot (const Standard_Real t1, const Standard_Real t2, const Standard_Integer f1, const Standard_Integer f2, Standard_Real& tRoot);
169 Standard_EXPORT Standard_Real DistanceFunction (const Standard_Real t);
171 Standard_EXPORT Standard_Real DerivativeFunction (const Standard_Real t);
173 Standard_EXPORT void PrepareArgsFuncArrays (const Standard_Real t1, const Standard_Real t2);
175 Standard_EXPORT void AddDerivativePoints (const IntTools_CArray1OfReal& t, const IntTools_CArray1OfReal& f);
177 Standard_EXPORT Standard_Real FindSimpleRoot (const Standard_Integer IP, const Standard_Real ta, const Standard_Real tb, const Standard_Real fA);
179 Standard_EXPORT Standard_Real FindGoldRoot (const Standard_Real ta, const Standard_Real tb, const Standard_Real coeff);
181 Standard_EXPORT Standard_Integer MakeType (IntTools_CommonPrt& aCP);
183 Standard_EXPORT void IsIntersection (const Standard_Real ta, const Standard_Real tb);
185 Standard_EXPORT void FindDerivativeRoot (const IntTools_CArray1OfReal& t, const IntTools_CArray1OfReal& f);
187 Standard_EXPORT void RemoveIdenticalRoots();
189 Standard_EXPORT Standard_Boolean CheckTouch (const IntTools_CommonPrt& aCP, Standard_Real& aTX);
191 Standard_EXPORT Standard_Boolean CheckTouchVertex (const IntTools_CommonPrt& aCP, Standard_Real& aTX);
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;
235 #endif // _IntTools_EdgeFace_HeaderFile