#include <BRepAdaptor_Surface.hxx>
#include <Standard_Boolean.hxx>
#include <IntTools_SequenceOfRanges.hxx>
-#include <IntTools_FClass2d.hxx>
-#include <IntTools_CArray1OfReal.hxx>
-#include <IntTools_SequenceOfRoots.hxx>
#include <IntTools_SequenceOfCommonPrts.hxx>
#include <IntTools_Range.hxx>
class IntTools_Context;
class IntTools_Range;
class gp_Pnt;
class BRepAdaptor_Surface;
-class IntTools_CArray1OfReal;
class IntTools_CommonPrt;
-
-//! The class provides Edge/Face algorithm to determine
-//! common parts between edge and face in 3-d space.
-//! Common parts can be : Vertices or Edges.
+//! The class provides Edge/Face intersection algorithm to determine
+//! common parts between edge and face in 3-d space.
+//! Common parts between Edge and Face can be:
+//! - Vertices - in case of intersection or touching;
+//! - Edge - in case of full coincidence of the edge with the face.
class IntTools_EdgeFace
{
public:
DEFINE_STANDARD_ALLOC
-
+public: //! @name Constructors
//! Empty Constructor
Standard_EXPORT IntTools_EdgeFace();
-
-
- //! Initializes algorithm by the edge anEdge
- Standard_EXPORT void SetEdge (const TopoDS_Edge& anEdge);
-
-
- //! Initializes algorithm by edge tolerance
- Standard_EXPORT void SetTolE (const Standard_Real aTolEdge1);
-
-
- //! Initializes algorithm by the face aFace
- Standard_EXPORT void SetFace (const TopoDS_Face& aFace);
-
-
- //! Initializes algorithm by face tolerance
- Standard_EXPORT void SetTolF (const Standard_Real aTolFace);
-
-
- //! Returns edge
- Standard_EXPORT const TopoDS_Edge& Edge() const;
-
-
- //! Returns face
- Standard_EXPORT const TopoDS_Face& Face() const;
-
-
- //! Returns tolerance of the edge
- Standard_EXPORT Standard_Real TolE() const;
-
- //! Returns tolerance of the face
- Standard_EXPORT Standard_Real TolF() const;
-
-
- //! Initializes algorithm by discretization value
- Standard_EXPORT void SetDiscretize (const Standard_Integer aDiscret);
-
-
- //! Initializes algorithm by deflection value
- Standard_EXPORT void SetDeflection (const Standard_Real aDeflection);
-
-
- //! Initializes algorithm by parameter tolerance
- Standard_EXPORT void SetEpsilonT (const Standard_Real anEpsT);
-
-
- //! Initializes algorithm by distance tolerance
- Standard_EXPORT void SetEpsilonNull (const Standard_Real anEpsNull);
-
-
- //! Sets boundaries for edge.
+public: //! @name Setters/Getters
+
+ //! Sets the edge for intersection
+ void SetEdge(const TopoDS_Edge& theEdge)
+ {
+ myEdge = theEdge;
+ }
+
+ //! Returns the edge
+ const TopoDS_Edge& Edge() const
+ {
+ return myEdge;
+ }
+
+ //! Sets the face for intersection
+ void SetFace(const TopoDS_Face& theFace)
+ {
+ myFace = theFace;
+ }
+
+ //! Returns the face
+ const TopoDS_Face& Face() const
+ {
+ return myFace;
+ }
+
+ //! Sets the boundaries for the edge.
//! The algorithm processes edge inside these boundaries.
- Standard_EXPORT void SetRange (const IntTools_Range& aRange);
-
+ void SetRange(const IntTools_Range& theRange)
+ {
+ myRange = theRange;
+ }
- //! Sets boundaries for edge.
+ //! Sets the boundaries for the edge.
//! The algorithm processes edge inside these boundaries.
- Standard_EXPORT void SetRange (const Standard_Real aFirst, const Standard_Real aLast);
-
-
- //! Sets the intersecton context
- Standard_EXPORT void SetContext (const Handle(IntTools_Context)& theContext);
-
-
- //! Gets the intersecton context
- Standard_EXPORT const Handle(IntTools_Context)& Context() const;
-
+ void SetRange(const Standard_Real theFirst, const Standard_Real theLast)
+ {
+ myRange.SetFirst(theFirst);
+ myRange.SetLast(theLast);
+ }
+
+ //! Returns intersection range of the edge
+ const IntTools_Range& Range() const
+ {
+ return myRange;
+ }
+
+ //! Sets the intersection context
+ void SetContext(const Handle(IntTools_Context)& theContext)
+ {
+ myContext = theContext;
+ }
+
+ //! Returns the intersection context
+ const Handle(IntTools_Context)& Context() const
+ {
+ return myContext;
+ }
+
+ //! Sets the Fuzzy value
+ void SetFuzzyValue(const Standard_Real theFuzz)
+ {
+ myFuzzyValue = Max(theFuzz, Precision::Confusion());
+ }
+
+ //! Returns the Fuzzy value
+ Standard_Real FuzzyValue() const
+ {
+ return myFuzzyValue;
+ }
+
+ //! Sets the flag for quick coincidence check.
+ //! It is safe to use the quick check for coincidence only if both
+ //! of the following conditions are met:
+ //! - The vertices of edge are lying on the face;
+ //! - The edge does not intersect the boundaries of the face on the given range.
+ void UseQuickCoincidenceCheck(const Standard_Boolean theFlag)
+ {
+ myQuickCoincidenceCheck = theFlag;
+ }
+
+ //! Returns the flag myQuickCoincidenceCheck
+ Standard_Boolean IsCoincidenceCheckedQuickly()
+ {
+ return myQuickCoincidenceCheck;
+ }
+
+
+
+public: //! @name Performing the operation
//! Launches the process
Standard_EXPORT void Perform();
-
- //! Returns true if computation was done
- //! successfully, otherwise returns false
- Standard_EXPORT Standard_Boolean IsDone() const;
-
- //! Returns code of completion
- //! 0 - means successful completion
- //! 1 - the process was not started
- //! 2,3,4,5 - invalid source data for the algorithm
- //! 6 - discretization failed
- //! 7 - no projectable ranges found
- //! 11 - distance computing error
- Standard_EXPORT Standard_Integer ErrorStatus() const;
-
+public: //! @name Checking validity of the intersection
- //! Returns results
- Standard_EXPORT const IntTools_SequenceOfCommonPrts& CommonParts() const;
-
+ //! Returns TRUE if computation was successful.
+ //! Otherwise returns FALSE.
+ Standard_Boolean IsDone() const
+ {
+ return myIsDone;
+ }
- //! Returns boundaries for edge
- Standard_EXPORT const IntTools_Range& Range() const;
-
- Standard_EXPORT static Standard_Boolean IsEqDistance (const gp_Pnt& aP, const BRepAdaptor_Surface& aS, const Standard_Real aT, Standard_Real& aD);
+ //! Returns the code of completion:
+ //! 0 - means successful completion;
+ //! 1 - the process was not started;
+ //! 2,3 - invalid source data for the algorithm;
+ //! 4 - projection failed.
+ Standard_Integer ErrorStatus() const
+ {
+ return myErrorStatus;
+ }
+public: //! @name Obtaining results
+ //! Returns resulting common parts
+ const IntTools_SequenceOfCommonPrts& CommonParts() const
+ {
+ return mySeqOfCommonPrts;
+ }
-protected:
-
+protected: //! @name Protected methods performing the intersection
+
+ Standard_EXPORT static Standard_Boolean IsEqDistance (const gp_Pnt& aP, const BRepAdaptor_Surface& aS, const Standard_Real aT, Standard_Real& aD);
Standard_EXPORT void CheckData();
- Standard_EXPORT void Prepare();
-
Standard_EXPORT Standard_Boolean IsProjectable (const Standard_Real t) const;
- Standard_EXPORT void FindProjectableRoot (const Standard_Real t1, const Standard_Real t2, const Standard_Integer f1, const Standard_Integer f2, Standard_Real& tRoot);
-
Standard_EXPORT Standard_Real DistanceFunction (const Standard_Real t);
- Standard_EXPORT Standard_Real DerivativeFunction (const Standard_Real t);
-
- Standard_EXPORT void PrepareArgsFuncArrays (const Standard_Real t1, const Standard_Real t2);
-
- Standard_EXPORT void AddDerivativePoints (const IntTools_CArray1OfReal& t, const IntTools_CArray1OfReal& f);
-
- Standard_EXPORT Standard_Real FindSimpleRoot (const Standard_Integer IP, const Standard_Real ta, const Standard_Real tb, const Standard_Real fA);
-
- Standard_EXPORT Standard_Real FindGoldRoot (const Standard_Real ta, const Standard_Real tb, const Standard_Real coeff);
-
Standard_EXPORT Standard_Integer MakeType (IntTools_CommonPrt& aCP);
-
- Standard_EXPORT void IsIntersection (const Standard_Real ta, const Standard_Real tb);
-
- Standard_EXPORT void FindDerivativeRoot (const IntTools_CArray1OfReal& t, const IntTools_CArray1OfReal& f);
-
- Standard_EXPORT void RemoveIdenticalRoots();
-
+
Standard_EXPORT Standard_Boolean CheckTouch (const IntTools_CommonPrt& aCP, Standard_Real& aTX);
Standard_EXPORT Standard_Boolean CheckTouchVertex (const IntTools_CommonPrt& aCP, Standard_Real& aTX);
-
-
+ //! Checks if the edge is in the face really.
+ Standard_EXPORT Standard_Boolean IsCoincident();
private:
-
-
TopoDS_Edge myEdge;
TopoDS_Face myFace;
- Standard_Real myTolE;
- Standard_Real myTolF;
- Standard_Integer myDiscret;
- Standard_Real myEpsT;
- Standard_Real myEpsNull;
- Standard_Real myDeflection;
+ Standard_Real myFuzzyValue;
BRepAdaptor_Curve myC;
- Standard_Real myTmin;
- Standard_Real myTmax;
BRepAdaptor_Surface myS;
Standard_Real myCriteria;
Standard_Boolean myIsDone;
Standard_Integer myErrorStatus;
Handle(IntTools_Context) myContext;
- IntTools_SequenceOfRanges myProjectableRanges;
- IntTools_FClass2d myFClass2d;
- IntTools_CArray1OfReal myFuncArray;
- IntTools_CArray1OfReal myArgsArray;
- IntTools_SequenceOfRoots mySequenceOfRoots;
IntTools_SequenceOfCommonPrts mySeqOfCommonPrts;
- Standard_Real myPar1;
- Standard_Boolean myParallel;
IntTools_Range myRange;
-
-
+ Standard_Boolean myQuickCoincidenceCheck;
};
-
-
-
-
-
-
#endif // _IntTools_EdgeFace_HeaderFile