// This file is generated by WOK (CPPExt).
// Please do not edit this file; modify original file instead.
// The copyright and license terms as defined for the original file apply to 
// this header file considered to be the "object code" form of the original source.

#ifndef _BRep_Tool_HeaderFile
#define _BRep_Tool_HeaderFile

#include <Standard.hxx>
#include <Standard_DefineAlloc.hxx>
#include <Standard_Macro.hxx>

#include <Standard_Boolean.hxx>
#include <Handle_Geom_Surface.hxx>
#include <Handle_Poly_Triangulation.hxx>
#include <Standard_Real.hxx>
#include <Handle_Geom_Curve.hxx>
#include <Handle_Poly_Polygon3D.hxx>
#include <Handle_Geom2d_Curve.hxx>
#include <Standard_Integer.hxx>
#include <Handle_Poly_Polygon2D.hxx>
#include <Handle_Poly_PolygonOnTriangulation.hxx>
#include <GeomAbs_Shape.hxx>
class Standard_NullObject;
class Standard_NoSuchObject;
class TopoDS_Shape;
class Geom_Surface;
class TopoDS_Face;
class TopLoc_Location;
class Poly_Triangulation;
class TopoDS_Edge;
class Geom_Curve;
class Poly_Polygon3D;
class Geom2d_Curve;
class Poly_Polygon2D;
class Poly_PolygonOnTriangulation;
class gp_Pnt2d;
class gp_Pnt;
class TopoDS_Vertex;


//! Provides class methods  to  access to the geometry
//! of BRep shapes.
class BRep_Tool 
{
public:

  DEFINE_STANDARD_ALLOC

  
  //! If S is Solid or Shell, returns True if it has no free boundaries (edges).
  //! If S is Wire, returns True if it has no free ends (vertices).
  //! (Internal and External sub-shepes are ignored in this check.)
  //! For other shape types returns S.Closed().
  Standard_EXPORT static   Standard_Boolean IsClosed (const TopoDS_Shape& S) ;
  
  //! Returns the geometric surface of the face. Returns
  //! in <L> the location for the surface.
  Standard_EXPORT static  const  Handle(Geom_Surface)& Surface (const TopoDS_Face& F, TopLoc_Location& L) ;
  
  //! Returns the geometric  surface of the face. It can
  //! be a copy if there is a Location.
  Standard_EXPORT static   Handle(Geom_Surface) Surface (const TopoDS_Face& F) ;
  
  //! Returns  the Triangulation of  the  face. It  is a
  //! null handle if there is no triangulation.
  Standard_EXPORT static  const  Handle(Poly_Triangulation)& Triangulation (const TopoDS_Face& F, TopLoc_Location& L) ;
  
  //! Returns the tolerance of the face.
  Standard_EXPORT static   Standard_Real Tolerance (const TopoDS_Face& F) ;
  
  //! Returns the  NaturalRestriction  flag of the  face.
  Standard_EXPORT static   Standard_Boolean NaturalRestriction (const TopoDS_Face& F) ;
  
  //! Returns True if <E> is a 3d curve or a curve on
  //! surface.
  Standard_EXPORT static   Standard_Boolean IsGeometric (const TopoDS_Edge& E) ;
  
  //! Returns the 3D curve  of the edge.  May be  a Null
  //! handle. Returns in <L> the location for the curve.
  //! In <First> and <Last> the parameter range.
  Standard_EXPORT static  const  Handle(Geom_Curve)& Curve (const TopoDS_Edge& E, TopLoc_Location& L, Standard_Real& First, Standard_Real& Last) ;
  
  //! Returns the 3D curve  of the edge. May be a Null handle.
  //! In <First> and <Last> the parameter range.
  //! It can be a copy if there is a Location.
  Standard_EXPORT static   Handle(Geom_Curve) Curve (const TopoDS_Edge& E, Standard_Real& First, Standard_Real& Last) ;
  
  //! Returns the 3D polygon of the edge. May be   a Null
  //! handle. Returns in <L> the location for the polygon.
  Standard_EXPORT static  const  Handle(Poly_Polygon3D)& Polygon3D (const TopoDS_Edge& E, TopLoc_Location& L) ;
  
  //! Returns the curve  associated to the  edge in  the
  //! parametric  space of  the  face.  Returns   a NULL
  //! handle  if this curve  does not exist.  Returns in
  //! <First> and <Last> the parameter range.
  Standard_EXPORT static   Handle(Geom2d_Curve) CurveOnSurface (const TopoDS_Edge& E, const TopoDS_Face& F, Standard_Real& First, Standard_Real& Last) ;
  
  //! Returns the  curve associated to   the edge in the
  //! parametric  space of the   surface. Returns a NULL
  //! handle  if this curve does  not exist.  Returns in
  //! <First> and <Last> the parameter range.
  Standard_EXPORT static   Handle(Geom2d_Curve) CurveOnSurface (const TopoDS_Edge& E, const Handle(Geom_Surface)& S, const TopLoc_Location& L, Standard_Real& First, Standard_Real& Last) ;
  
  //! Returns in <C>, <S>, <L> a 2d curve, a surface and
  //! a location for the edge <E>. <C> and <S>  are null
  //! if the  edge has no curve on  surface.  Returns in
  //! <First> and <Last> the parameter range.
  Standard_EXPORT static   void CurveOnSurface (const TopoDS_Edge& E, Handle(Geom2d_Curve)& C, Handle(Geom_Surface)& S, TopLoc_Location& L, Standard_Real& First, Standard_Real& Last) ;
  
  //! Returns in <C>, <S>, <L> the 2d curve, the surface
  //! and the location for the edge <E> of rank <Index>.
  //! <C> and <S> are null if the index is out of range.
  //! Returns in <First> and <Last> the parameter range.
  Standard_EXPORT static   void CurveOnSurface (const TopoDS_Edge& E, Handle(Geom2d_Curve)& C, Handle(Geom_Surface)& S, TopLoc_Location& L, Standard_Real& First, Standard_Real& Last, const Standard_Integer Index) ;
  
  //! Returns the polygon associated to the  edge in  the
  //! parametric  space of  the  face.  Returns   a NULL
  //! handle  if this polygon  does not exist.
  Standard_EXPORT static   Handle(Poly_Polygon2D) PolygonOnSurface (const TopoDS_Edge& E, const TopoDS_Face& F) ;
  
  //! Returns the polygon associated to the  edge in  the
  //! parametric  space of  the surface. Returns   a NULL
  //! handle  if this polygon  does not exist.
  Standard_EXPORT static   Handle(Poly_Polygon2D) PolygonOnSurface (const TopoDS_Edge& E, const Handle(Geom_Surface)& S, const TopLoc_Location& L) ;
  
  //! Returns in <C>, <S>, <L> a 2d curve, a surface and
  //! a location for the edge <E>. <C> and <S>  are null
  //! if the  edge has no polygon on  surface.
  Standard_EXPORT static   void PolygonOnSurface (const TopoDS_Edge& E, Handle(Poly_Polygon2D)& C, Handle(Geom_Surface)& S, TopLoc_Location& L) ;
  
  //! Returns in <C>, <S>, <L> the 2d curve, the surface
  //! and the location for the edge <E> of rank <Index>.
  //! <C> and <S> are null if the index is out of range.
  Standard_EXPORT static   void PolygonOnSurface (const TopoDS_Edge& E, Handle(Poly_Polygon2D)& C, Handle(Geom_Surface)& S, TopLoc_Location& L, const Standard_Integer Index) ;
  
  //! Returns the polygon associated to the  edge in  the
  //! parametric  space of  the  face.  Returns   a NULL
  //! handle  if this polygon  does not exist.
  Standard_EXPORT static  const  Handle(Poly_PolygonOnTriangulation)& PolygonOnTriangulation (const TopoDS_Edge& E, const Handle(Poly_Triangulation)& T, const TopLoc_Location& L) ;
  
  //! Returns in <P>, <T>, <L> a polygon on triangulation, a
  //! triangulation and a location for the edge <E>.
  //! <P>  and  <T>  are null  if  the  edge has no
  //! polygon on  triangulation.
  Standard_EXPORT static   void PolygonOnTriangulation (const TopoDS_Edge& E, Handle(Poly_PolygonOnTriangulation)& P, Handle(Poly_Triangulation)& T, TopLoc_Location& L) ;
  
  //! Returns   in   <P>,  <T>,    <L> a     polygon  on
  //! triangulation,   a triangulation  and a  location for
  //! the edge <E> for the range index.  <C> and <S> are
  //! null if the edge has no polygon on triangulation.
  Standard_EXPORT static   void PolygonOnTriangulation (const TopoDS_Edge& E, Handle(Poly_PolygonOnTriangulation)& P, Handle(Poly_Triangulation)& T, TopLoc_Location& L, const Standard_Integer Index) ;
  
  //! Returns  True  if  <E>  has  two  PCurves  in  the
  //! parametric space of <F>. i.e.  <F>  is on a closed
  //! surface and <E> is on the closing curve.
  Standard_EXPORT static   Standard_Boolean IsClosed (const TopoDS_Edge& E, const TopoDS_Face& F) ;
  
  //! Returns  True  if  <E>  has  two  PCurves  in  the
  //! parametric space  of <S>.  i.e.   <S>  is a closed
  //! surface and <E> is on the closing curve.
  Standard_EXPORT static   Standard_Boolean IsClosed (const TopoDS_Edge& E, const Handle(Geom_Surface)& S, const TopLoc_Location& L) ;
  
  //! Returns  True  if <E> has two arrays of indices in
  //! the triangulation <T>.
  Standard_EXPORT static   Standard_Boolean IsClosed (const TopoDS_Edge& E, const Handle(Poly_Triangulation)& T) ;
  
  //! Returns the tolerance for <E>.
  Standard_EXPORT static   Standard_Real Tolerance (const TopoDS_Edge& E) ;
  
  //! Returns the SameParameter flag for the edge.
  Standard_EXPORT static   Standard_Boolean SameParameter (const TopoDS_Edge& E) ;
  
  //! Returns the SameRange flag for the edge.
  Standard_EXPORT static   Standard_Boolean SameRange (const TopoDS_Edge& E) ;
  
  //! Returns True  if the edge is degenerated.
  Standard_EXPORT static   Standard_Boolean Degenerated (const TopoDS_Edge& E) ;
  
  //! Gets the range of the 3d curve.
  Standard_EXPORT static   void Range (const TopoDS_Edge& E, Standard_Real& First, Standard_Real& Last) ;
  
  //! Gets the range  of the edge  on the pcurve on  the
  //! surface.
  Standard_EXPORT static   void Range (const TopoDS_Edge& E, const Handle(Geom_Surface)& S, const TopLoc_Location& L, Standard_Real& First, Standard_Real& Last) ;
  
  //! Gets the range of the edge on the pcurve on the face.
  Standard_EXPORT static   void Range (const TopoDS_Edge& E, const TopoDS_Face& F, Standard_Real& First, Standard_Real& Last) ;
  
  //! Gets the UV locations of the extremities of the edge.
  Standard_EXPORT static   void UVPoints (const TopoDS_Edge& E, const Handle(Geom_Surface)& S, const TopLoc_Location& L, gp_Pnt2d& PFirst, gp_Pnt2d& PLast) ;
  
  //! Gets the UV locations of the extremities of the edge.
  Standard_EXPORT static   void UVPoints (const TopoDS_Edge& E, const TopoDS_Face& F, gp_Pnt2d& PFirst, gp_Pnt2d& PLast) ;
  
  //! Sets the UV locations of the extremities of the edge.
  Standard_EXPORT static   void SetUVPoints (const TopoDS_Edge& E, const Handle(Geom_Surface)& S, const TopLoc_Location& L, const gp_Pnt2d& PFirst, const gp_Pnt2d& PLast) ;
  
  //! Sets the UV locations of the extremities of the edge.
  Standard_EXPORT static   void SetUVPoints (const TopoDS_Edge& E, const TopoDS_Face& F, const gp_Pnt2d& PFirst, const gp_Pnt2d& PLast) ;
  
  //! Returns True if the edge is on the surfaces of the
  //! two faces.
  Standard_EXPORT static   Standard_Boolean HasContinuity (const TopoDS_Edge& E, const TopoDS_Face& F1, const TopoDS_Face& F2) ;
  
  //! Returns the continuity.
  Standard_EXPORT static   GeomAbs_Shape Continuity (const TopoDS_Edge& E, const TopoDS_Face& F1, const TopoDS_Face& F2) ;
  
  //! Returns True if the edge is on the surfaces.
  Standard_EXPORT static   Standard_Boolean HasContinuity (const TopoDS_Edge& E, const Handle(Geom_Surface)& S1, const Handle(Geom_Surface)& S2, const TopLoc_Location& L1, const TopLoc_Location& L2) ;
  
  //! Returns the continuity.
  Standard_EXPORT static   GeomAbs_Shape Continuity (const TopoDS_Edge& E, const Handle(Geom_Surface)& S1, const Handle(Geom_Surface)& S2, const TopLoc_Location& L1, const TopLoc_Location& L2) ;
  
  //! Returns True if the edge has regularity on some
  //! two surfaces
  Standard_EXPORT static   Standard_Boolean HasContinuity (const TopoDS_Edge& E) ;
  
  //! Returns the 3d point.
  Standard_EXPORT static   gp_Pnt Pnt (const TopoDS_Vertex& V) ;
  
  //! Returns the tolerance.
  Standard_EXPORT static   Standard_Real Tolerance (const TopoDS_Vertex& V) ;
  
  //! Returns the parameter of <V> on <E>.
  Standard_EXPORT static   Standard_Real Parameter (const TopoDS_Vertex& V, const TopoDS_Edge& E) ;
  
  //! Returns the  parameters  of   the  vertex   on the
  //! pcurve of the edge on the face.
  Standard_EXPORT static   Standard_Real Parameter (const TopoDS_Vertex& V, const TopoDS_Edge& E, const TopoDS_Face& F) ;
  
  //! Returns the  parameters  of   the  vertex   on the
  //! pcurve of the edge on the surface.
  Standard_EXPORT static   Standard_Real Parameter (const TopoDS_Vertex& V, const TopoDS_Edge& E, const Handle(Geom_Surface)& S, const TopLoc_Location& L) ;
  
  //! Returns the parameters of the vertex on the face.
  Standard_EXPORT static   gp_Pnt2d Parameters (const TopoDS_Vertex& V, const TopoDS_Face& F) ;




protected:





private:





};







#endif // _BRep_Tool_HeaderFile
