// 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 _BRepOffsetAPI_FindContigousEdges_HeaderFile
#define _BRepOffsetAPI_FindContigousEdges_HeaderFile

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

#include <Handle_BRepBuilderAPI_Sewing.hxx>
#include <Standard_Real.hxx>
#include <Standard_Boolean.hxx>
#include <Standard_Integer.hxx>
class BRepBuilderAPI_Sewing;
class Standard_OutOfRange;
class Standard_NoSuchObject;
class TopoDS_Shape;
class TopoDS_Edge;
class TopTools_ListOfShape;


//! Provides methods to identify contigous boundaries
//! for continuity control (C0, C1, ...)
//!
//! Use this function as following:
//! - create an object
//! - default tolerance 1.E-06
//! - with analysis of degenerated faces on
//! - define if necessary a new tolerance
//! - set if necessary analysis of degenerated shapes off
//! - add shapes to be controlled -> Add
//! - compute -> Perfom
//! - output couples of connected edges for control
//! - output the problems if any
class BRepOffsetAPI_FindContigousEdges 
{
public:

  DEFINE_STANDARD_ALLOC

  
  //! Initializes an algorithm for identifying contiguous edges
  //! on shapes with tolerance as the tolerance of contiguity
  //! (defaulted to 1.0e-6). This tolerance value is used to
  //! determine whether two edges or sections of edges are coincident.
  //! Use the function Add to define the shapes to be checked.
  //! Set option to false. This argument (defaulted to true) will
  //! serve in subsequent software releases for performing an
  //! analysis of degenerated shapes.
  Standard_EXPORT BRepOffsetAPI_FindContigousEdges(const Standard_Real tolerance = 1.0e-06, const Standard_Boolean option = Standard_True);
  
  //! Initializes this algorithm for identifying contiguous edges
  //! on shapes using the tolerance of contiguity tolerance.
  //! This tolerance value is used to determine whether two
  //! edges or sections of edges are coincident.
  //! Use the function Add to define the shapes to be checked.
  //! Sets <option> to false.
  Standard_EXPORT   void Init (const Standard_Real tolerance, const Standard_Boolean option) ;
  
  //! Adds the shape shape to the list of shapes to be
  //! checked by this algorithm.
  //! Once all the shapes to be checked have been added,
  //! use the function Perform to find the contiguous edges
  //! and the function ContigousEdge to return these edges.
  Standard_EXPORT   void Add (const TopoDS_Shape& shape) ;
  
  //! Finds coincident parts of edges of two or more shapes
  //! added to this algorithm and breaks down these edges
  //! into contiguous and non-contiguous sections on copies
  //! of the initial shapes.
  //! The function ContigousEdge returns contiguous
  //! edges. The function Modified can be used to return
  //! modified copies of the initial shapes where one or more
  //! edges were broken down into contiguous and non-contiguous sections.
  //! Warning
  //! This function must be used once all the shapes to be
  //! checked have been added. It is not possible to add
  //! further shapes subsequently and then to repeat the call to Perform.
  Standard_EXPORT   void Perform() ;
  
  //! Gives  the number  of edges (free  edges + contigous
  //! edges  +  multiple edge)
  Standard_EXPORT   Standard_Integer NbEdges()  const;
  
  //! Returns the number of contiguous edges found by the
  //! function Perform on the shapes added to this algorithm.
  Standard_EXPORT   Standard_Integer NbContigousEdges()  const;
  
  //! Returns the contiguous edge of index index found by
  //! the function Perform on the shapes added to this algorithm.
  //! Exceptions
  //! Standard_OutOfRange if:
  //! - index is less than 1, or
  //! - index is greater than the number of contiguous
  //! edges found by the function Perform on the shapes added to this algorithm.
  Standard_EXPORT  const  TopoDS_Edge& ContigousEdge (const Standard_Integer index)  const;
  
  //! Returns a list of edges coincident with the contiguous
  //! edge of index index found by the function Perform.
  //! There are as many edges in the list as there are faces
  //! adjacent to this contiguous edge.
  //! Exceptions
  //! Standard_OutOfRange if:
  //! - index is less than 1, or
  //! - index is greater than the number of contiguous edges
  //! found by the function Perform on the shapes added to this algorithm.
  Standard_EXPORT  const  TopTools_ListOfShape& ContigousEdgeCouple (const Standard_Integer index)  const;
  
  //! Returns the edge on the initial shape, of which the
  //! modified copy contains the edge section.
  //! section is coincident with a contiguous edge found by
  //! the function Perform. Use the function
  //! ContigousEdgeCouple to obtain a valid section.
  //! This information is useful for verification purposes, since
  //! it provides a means of determining the surface to which
  //! the contiguous edge belongs.
  //! Exceptions
  //! Standard_NoSuchObject if section is not coincident
  //! with a contiguous edge. Use the function
  //! ContigousEdgeCouple to obtain a valid section.
  Standard_EXPORT  const  TopoDS_Edge& SectionToBoundary (const TopoDS_Edge& section)  const;
  
  //! Gives the number of degenerated shapes
  Standard_EXPORT   Standard_Integer NbDegeneratedShapes()  const;
  
  //! Gives a degenerated shape
  Standard_EXPORT  const  TopoDS_Shape& DegeneratedShape (const Standard_Integer index)  const;
  
  //! Indicates if a input shape is degenerated
  Standard_EXPORT   Standard_Boolean IsDegenerated (const TopoDS_Shape& shape)  const;
  
  //! Returns true if the copy of the initial shape shape was
  //! modified by the function Perform (i.e. if one or more of
  //! its edges was broken down into contiguous and non-contiguous sections).
  //! Warning
  //! Returns false if shape is not one of the initial shapes
  //! added to this algorithm.
  Standard_EXPORT   Standard_Boolean IsModified (const TopoDS_Shape& shape)  const;
  
  //! Gives a modifieded shape
  //! Raises   NoSuchObject if shape has not been modified
  Standard_EXPORT  const  TopoDS_Shape& Modified (const TopoDS_Shape& shape)  const;
  
  //! Dump properties of resulting shape.
  Standard_EXPORT   void Dump()  const;




protected:





private:



  Handle(BRepBuilderAPI_Sewing) mySewing;


};







#endif // _BRepOffsetAPI_FindContigousEdges_HeaderFile
