// Created on: 2000-11-23 // Created by: Michael KLOKOV // Copyright (c) 2000-2014 OPEN CASCADE SAS // // This file is part of Open CASCADE Technology software library. // // This library is free software; you can redistribute it and/or modify it under // the terms of the GNU Lesser General Public License version 2.1 as published // by the Free Software Foundation, with special exception defined in the file // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT // distribution for complete text of the license and disclaimer of any warranty. // // Alternatively, this file may be used under the terms of Open CASCADE // commercial license or contractual agreement. #ifndef _IntTools_FaceFace_HeaderFile #define _IntTools_FaceFace_HeaderFile #include "GeomAdaptor_Surface.hxx" #include "GeomInt_LineConstructor.hxx" #include "IntPatch_Intersection.hxx" #include "IntSurf_PntOn2S.hxx" #include "NCollection_List.hxx" #include "IntTools_Curve.hxx" #include "NCollection_Sequence.hxx" #include "IntTools_PntOn2Faces.hxx" #include "TopoDS_Face.hxx" class IntTools_Context; class Adaptor3d_TopolTool; //! This class provides the intersection of //! face's underlying surfaces. class IntTools_FaceFace { public: DEFINE_STANDARD_ALLOC //! Empty constructor. Standard_EXPORT IntTools_FaceFace(); //! Modifier Standard_EXPORT void SetParameters(const bool ApproxCurves, const bool ComputeCurveOnS1, const bool ComputeCurveOnS2, const double ApproximationTolerance); //! Intersects underliing surfaces of F1 and F2 //! Use sum of tolerance of F1 and F2 as intersection //! criteria Standard_EXPORT void Perform(const TopoDS_Face& F1, const TopoDS_Face& F2, const bool theToRunParallel = false); //! Returns True if the intersection was successful Standard_EXPORT bool IsDone() const; //! Returns sequence of 3d curves as result of intersection Standard_EXPORT const NCollection_Sequence& Lines() const; //! Returns sequence of 3d curves as result of intersection Standard_EXPORT const NCollection_Sequence& Points() const; //! Returns first of processed faces Standard_EXPORT const TopoDS_Face& Face1() const; //! Returns second of processed faces Standard_EXPORT const TopoDS_Face& Face2() const; //! Returns True if faces are tangent Standard_EXPORT bool TangentFaces() const; //! Provides post-processing the result lines. //! @param[in] bToSplit split the closed 3D-curves on parts when TRUE, //! remain untouched otherwise Standard_EXPORT void PrepareLines3D(const bool bToSplit = true); Standard_EXPORT void SetList(NCollection_List& ListOfPnts); //! Sets the intersection context Standard_EXPORT void SetContext(const occ::handle& aContext); //! Sets the Fuzzy value Standard_EXPORT void SetFuzzyValue(const double theFuzz); //! Returns Fuzzy value Standard_EXPORT double FuzzyValue() const; //! Gets the intersection context Standard_EXPORT const occ::handle& Context() const; protected: //! Creates curves from the IntPatch_Line. Standard_EXPORT void MakeCurve(const int Index, const occ::handle& D1, const occ::handle& D2, const double theToler); //! Computes the valid tolerance for the intersection curves //! as a maximal deviation between 3D curve and 2D curves on faces. //! If there are no 2D curves the maximal deviation between 3D curves //! and surfaces is computed. Standard_EXPORT void ComputeTolReached3d(const bool theToRunParallel); protected: bool myIsDone; IntPatch_Intersection myIntersector; GeomInt_LineConstructor myLConstruct; occ::handle myHS1; occ::handle myHS2; int myNbrestr; bool myApprox; bool myApprox1; bool myApprox2; double myTolApprox; double myTolF1; double myTolF2; double myTol; double myFuzzyValue; NCollection_Sequence mySeqOfCurve; bool myTangentFaces; TopoDS_Face myFace1; TopoDS_Face myFace2; NCollection_Sequence myPnts; NCollection_List myListOfPnts; occ::handle myContext; }; #endif // _IntTools_FaceFace_HeaderFile