// File generated by CPPExt (Value)
//
//                     Copyright (C) 1991 - 2000 by  
//                      Matra Datavision SA.  All rights reserved.
//  
//                     Copyright (C) 2001 - 2004 by
//                     Open CASCADE SA.  All rights reserved.
// 
// This file is part of the Open CASCADE Technology software.
//
// This software may be distributed and/or modified under the terms and
// conditions of the Open CASCADE Public License as defined by Open CASCADE SA
// and appearing in the file LICENSE included in the packaging of this file.
//  
// This software is distributed on an "AS IS" basis, without warranty of any
// kind, and Open CASCADE SA hereby disclaims all such warranties,
// including without limitation, any warranties of merchantability, fitness
// for a particular purpose or non-infringement. Please see the License for
// the specific terms and conditions governing rights and limitations under the
// License.

#ifndef _BOPTools_Tools_HeaderFile
#define _BOPTools_Tools_HeaderFile

#ifndef _Standard_Real_HeaderFile
#include <Standard_Real.hxx>
#endif
#ifndef _Standard_Boolean_HeaderFile
#include <Standard_Boolean.hxx>
#endif
class gp_Pnt;
class TopoDS_Vertex;
class TopoDS_Edge;
class TopoDS_Face;
class IntTools_Curve;
class BOPTools_PaveBlock;
class IntTools_Context;
class TopoDS_Shape;
class TopTools_IndexedMapOfShape;
class IntTools_Range;


#ifndef _Standard_HeaderFile
#include <Standard.hxx>
#endif
#ifndef _Standard_Macro_HeaderFile
#include <Standard_Macro.hxx>
#endif


//!  The class contains handy static functions <br>
//!  dealing with the topology <br>
class BOPTools_Tools  {

public:

    void* operator new(size_t,void* anAddress) 
      {
        return anAddress;
      }
    void* operator new(size_t size) 
      { 
        return Standard::Allocate(size); 
      }
    void  operator delete(void *anAddress) 
      { 
        if (anAddress) Standard::Free((Standard_Address&)anAddress); 
      }
 // Methods PUBLIC
 // 


//! Make a vertex using 3D-point <aP1> and 3D-tolerance value <aTol> <br>
Standard_EXPORT static  void MakeNewVertex(const gp_Pnt& aP1,const Standard_Real aTol,TopoDS_Vertex& aNewVertex) ;


//! Make a vertex using couple of vertices  <aV1, aV2> <br>
Standard_EXPORT static  void MakeNewVertex(const TopoDS_Vertex& aV1,const TopoDS_Vertex& aV2,TopoDS_Vertex& aNewVertex) ;


//! Make a vertex in place of intersection between two edges <br>
//! <aE1, aE2> with parameters <aP1, aP2> <br>
Standard_EXPORT static  void MakeNewVertex(const TopoDS_Edge& aE1,const Standard_Real aP1,const TopoDS_Edge& aE2,const Standard_Real aP2,TopoDS_Vertex& aNewVertex) ;


//! Make a vertex in place of intersection between the edge <aE1> <br>
//! with parameter <aP1> and the face <aF2> <br>
Standard_EXPORT static  void MakeNewVertex(const TopoDS_Edge& aE1,const Standard_Real aP1,const TopoDS_Face& aF2,TopoDS_Vertex& aNewVertex) ;


//! Compute a 3D-point on the edge <aEdge> at parameter <aPrm> <br>
Standard_EXPORT static  void PointOnEdge(const TopoDS_Edge& aEdge,const Standard_Real aPrm,gp_Pnt& aP) ;


//! Make the edge from base edge <aE1> and two vertices <aV1,aV2> <br>
//! at parameters <aP1,aP2> <br>
Standard_EXPORT static  void MakeSplitEdge(const TopoDS_Edge& aE1,const TopoDS_Vertex& aV1,const Standard_Real aP1,const TopoDS_Vertex& aV2,const Standard_Real aP2,TopoDS_Edge& aNewEdge) ;


//! Make the edge from 3D-Curve <aIC>  and two vertices <aV1,aV2> <br>
//! at parameters <aP1,aP2> <br>
Standard_EXPORT static  void MakeSectEdge(const IntTools_Curve& aIC,const TopoDS_Vertex& aV1,const Standard_Real aP1,const TopoDS_Vertex& aV2,const Standard_Real aP2,TopoDS_Edge& aNewEdge) ;


//! Update the tolerance value for vertex  <aV> <br>
//! taking into account the fact that <aV> lays on <br>
//! the curve <aIC> <br>
Standard_EXPORT static  void UpdateVertex(const IntTools_Curve& aIC,const Standard_Real aT,const TopoDS_Vertex& aV) ;


//! Update the tolerance value for vertex  <aV> <br>
//! taking into account the fact that <aV> lays on <br>
//! the edge <aE> <br>
Standard_EXPORT static  void UpdateVertex(const TopoDS_Edge& aE,const Standard_Real aT,const TopoDS_Vertex& aV) ;


//! Update the tolerance value for vertex  <aVN> <br>
//! taking into account the fact that <aVN> should <br>
//! cover tolerance zone of <aVF> <br>
Standard_EXPORT static  void UpdateVertex(const TopoDS_Vertex& aVF,const TopoDS_Vertex& aVN) ;


//! Returns TRUE if PaveBlocks  <aPB1>,<aPB2> coinside in 3D <br>
//! taking into account corresp. tolerances' values of vertices, <br>
//! edges <br>
Standard_EXPORT static  Standard_Boolean IsBlocksCoinside(const BOPTools_PaveBlock& aPB1,const BOPTools_PaveBlock& aPB2) ;


//! Returns TRUE if PaveBlock <aPB> lays on the face <aF>, i.e <br>
//! the <PB> is IN or ON in 2D of <aF> <br>
Standard_EXPORT static  Standard_Boolean IsBlockInOnFace(const BOPTools_PaveBlock& aPB,const TopoDS_Face& aF,IntTools_Context& aContext) ;


//! Get a  Map <aM> containing the shape itself and all its subshapes <br>
Standard_EXPORT static  void MapShapes(const TopoDS_Shape& aS,TopTools_IndexedMapOfShape& aM) ;


//! Correct shrunk range <aSR> taking into account 3D-curve <br>
//! resolution and corresp. tolerances' values of <aE1>, <aE2> <br>
Standard_EXPORT static  void CorrectRange(const TopoDS_Edge& aE1,const TopoDS_Edge& aE2,const IntTools_Range& aSR,IntTools_Range& aNewSR) ;


//! Correct shrunk range <aSR> taking into account 3D-curve <br>
//! resolution and corresp. tolerances' values of <aE>, <aF> <br>
Standard_EXPORT static  void CorrectRange(const TopoDS_Edge& aE,const TopoDS_Face& aF,const IntTools_Range& aSR,IntTools_Range& aNewSR) ;


//! Make a copy of <aSourceShape> <br>
Standard_EXPORT static  void CopySource(const TopoDS_Shape& aSourceShape,TopoDS_Shape& aDestShape) ;





protected:

 // Methods PROTECTED
 // 


 // Fields PROTECTED
 //


private: 

 // Methods PRIVATE
 // 


 // Fields PRIVATE
 //


};





// other Inline functions and methods (like "C++: function call" methods)
//


#endif
