0030675: Visualization - remove redundant proxy classes in hierarchy of PrsMgr_Presen...
[occt.git] / src / IntTools / IntTools_EdgeFace.hxx
index 360c180..33af356 100644 (file)
@@ -28,9 +28,6 @@
 #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;
@@ -39,197 +36,180 @@ class TopoDS_Face;
 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