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

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

#include <TopAbs_State.hxx>
#include <TopoDS_Shape.hxx>
#include <Handle_TopOpeBRepDS_HDataStructure.hxx>
#include <TopOpeBRepDS_BuildTool.hxx>
#include <Handle_TopTools_HArray1OfShape.hxx>
#include <TopTools_DataMapOfIntegerListOfShape.hxx>
#include <Handle_TopTools_HArray1OfListOfShape.hxx>
#include <TopOpeBRepDS_DataMapOfShapeListOfShapeOn1State.hxx>
#include <TopTools_ListOfShape.hxx>
#include <TopTools_DataMapOfShapeListOfShape.hxx>
#include <Standard_Boolean.hxx>
#include <TopoDS_Solid.hxx>
#include <TopoDS_Face.hxx>
#include <TopoDS_Edge.hxx>
#include <TopTools_IndexedMapOfShape.hxx>
#include <Standard_Integer.hxx>
#include <TopOpeBRepTool_ShapeClassifier.hxx>
#include <TopTools_MapOfShape.hxx>
#include <TCollection_AsciiString.hxx>
#include <TopTools_IndexedDataMapOfShapeShape.hxx>
#include <TopTools_IndexedMapOfOrientedShape.hxx>
#include <TopAbs_ShapeEnum.hxx>
#include <TopAbs_Orientation.hxx>
#include <TopOpeBRepDS_Config.hxx>
#include <Standard_Real.hxx>
#include <Standard_Address.hxx>
class TopOpeBRepDS_HDataStructure;
class TopTools_HArray1OfShape;
class TopTools_HArray1OfListOfShape;
class Standard_NoSuchObject;
class TopOpeBRepBuild_HBuilder;
class TopOpeBRepDS_BuildTool;
class TopoDS_Shape;
class TopTools_ListOfShape;
class TopTools_MapOfShape;
class TopTools_DataMapOfShapeShape;
class TopOpeBRepDS_DataMapOfShapeListOfShapeOn1State;
class TopOpeBRepTool_ShapeExplorer;
class TopOpeBRepBuild_ShapeSet;
class TopOpeBRepBuild_EdgeBuilder;
class TopOpeBRepBuild_FaceBuilder;
class TopOpeBRepBuild_SolidBuilder;
class TopOpeBRepBuild_WireEdgeSet;
class TopOpeBRepDS_PointIterator;
class TopOpeBRepBuild_PaveSet;
class TopTools_DataMapOfIntegerListOfShape;
class TopTools_DataMapOfIntegerShape;
class TopOpeBRepBuild_GTopo;
class TopOpeBRepBuild_ShellFaceSet;
class TopOpeBRepDS_SurfaceIterator;
class TopTools_IndexedMapOfOrientedShape;
class TopOpeBRepDS_CurveIterator;
class TopoDS_Vertex;
class TopoDS_Edge;
class TopTools_DataMapOfShapeInteger;
class gp_Pnt;
class TopoDS_Face;
class TCollection_AsciiString;


//! The Builder  algorithm    constructs   topological
//! objects  from   an    existing  topology  and  new
//! geometries attached to the topology. It is used to
//! construct the result of a topological operation;
//! the existing  topologies are the parts involved in
//! the  topological  operation and the new geometries
//! are the intersection lines and points.
class TopOpeBRepBuild_Builder 
{
public:

  DEFINE_STANDARD_ALLOC

  
  Standard_EXPORT TopOpeBRepBuild_Builder(const TopOpeBRepDS_BuildTool& BT);
  
  Standard_EXPORT virtual   void Destroy() ;
Standard_EXPORT virtual ~TopOpeBRepBuild_Builder()  {  Destroy() ; }
  
  Standard_EXPORT   TopOpeBRepDS_BuildTool& ChangeBuildTool() ;
  
  Standard_EXPORT  const  TopOpeBRepDS_BuildTool& BuildTool()  const;
  
  //! Stores the data structure <HDS>,
  //! Create shapes from the new geometries.
  Standard_EXPORT virtual   void Perform (const Handle(TopOpeBRepDS_HDataStructure)& HDS) ;
  
  //! Stores the data structure <HDS>,
  //! Create shapes from the new geometries,
  //! Evaluates if an operation performed on shapes S1,S2
  //! is a particular case.
  Standard_EXPORT virtual   void Perform (const Handle(TopOpeBRepDS_HDataStructure)& HDS, const TopoDS_Shape& S1, const TopoDS_Shape& S2) ;
  
  //! returns the DS handled by this builder
  Standard_EXPORT   Handle(TopOpeBRepDS_HDataStructure) DataStructure()  const;
  
  //! Removes all splits and merges already performed.
  //! Does NOT clear the handled DS.
  Standard_EXPORT virtual   void Clear() ;
  
  //! Merges  the two edges <S1> and <S2> keeping the
  //! parts in each edge of states <TB1> and <TB2>.
  //! Booleans onA, onB, onAB indicate wheter parts of edges
  //! found as state ON respectively on first, second, and both
  //! shapes must be (or not) built.
  Standard_EXPORT   void MergeEdges (const TopTools_ListOfShape& L1, const TopAbs_State TB1, const TopTools_ListOfShape& L2, const TopAbs_State TB2, const Standard_Boolean onA = Standard_False, const Standard_Boolean onB = Standard_False, const Standard_Boolean onAB = Standard_False) ;
  
  //! Merges  the two faces <S1>   and <S2> keeping the
  //! parts in each face of states <TB1> and <TB2>.
  Standard_EXPORT   void MergeFaces (const TopTools_ListOfShape& S1, const TopAbs_State TB1, const TopTools_ListOfShape& S2, const TopAbs_State TB2, const Standard_Boolean onA = Standard_False, const Standard_Boolean onB = Standard_False, const Standard_Boolean onAB = Standard_False) ;
  
  //! Merges  the two solids <S1>   and <S2> keeping the
  //! parts in each solid of states <TB1> and <TB2>.
  Standard_EXPORT   void MergeSolids (const TopoDS_Shape& S1, const TopAbs_State TB1, const TopoDS_Shape& S2, const TopAbs_State TB2) ;
  
  //! Merges the two shapes <S1> and <S2> keeping the
  //! parts of states <TB1>,<TB2> in <S1>,<S2>.
  Standard_EXPORT   void MergeShapes (const TopoDS_Shape& S1, const TopAbs_State TB1, const TopoDS_Shape& S2, const TopAbs_State TB2) ;
  
  Standard_EXPORT   void End() ;
  
  Standard_EXPORT   Standard_Boolean Classify()  const;
  
  Standard_EXPORT   void ChangeClassify (const Standard_Boolean B) ;
  
  //! Merges the solid <S>  keeping the
  //! parts of state <TB>.
  Standard_EXPORT   void MergeSolid (const TopoDS_Shape& S, const TopAbs_State TB) ;
  
  //! Returns the vertex created on point <I>.
  Standard_EXPORT  const  TopoDS_Shape& NewVertex (const Standard_Integer I)  const;
  
  //! Returns the edges created on curve <I>.
  Standard_EXPORT  const  TopTools_ListOfShape& NewEdges (const Standard_Integer I)  const;
  
  //! Returns the faces created on surface <I>.
  Standard_EXPORT  const  TopTools_ListOfShape& NewFaces (const Standard_Integer I)  const;
  
  //! Returns True if the shape <S> has been split.
  Standard_EXPORT   Standard_Boolean IsSplit (const TopoDS_Shape& S, const TopAbs_State TB)  const;
  
  //! Returns the split parts <TB> of shape <S>.
  Standard_EXPORT  const  TopTools_ListOfShape& Splits (const TopoDS_Shape& S, const TopAbs_State TB)  const;
  
  //! Returns True if the shape <S> has been merged.
  Standard_EXPORT   Standard_Boolean IsMerged (const TopoDS_Shape& S, const TopAbs_State TB)  const;
  
  //! Returns the merged parts <TB> of shape <S>.
  Standard_EXPORT  const  TopTools_ListOfShape& Merged (const TopoDS_Shape& S, const TopAbs_State TB)  const;
  
  Standard_EXPORT   void InitSection() ;
  
  //! create parts ON solid of section edges
  Standard_EXPORT   void SplitSectionEdges() ;
  
  //! create parts ON solid of section edges
  Standard_EXPORT virtual   void SplitSectionEdge (const TopoDS_Shape& E) ;
  
  //! return the section edges built on new curves.
  Standard_EXPORT   void SectionCurves (TopTools_ListOfShape& L) ;
  
  //! return the parts of edges found ON the boundary
  //! of the two arguments S1,S2 of Perform()
  Standard_EXPORT   void SectionEdges (TopTools_ListOfShape& L) ;
  
  //! Fills anAncMap with pairs (edge,ancestor edge) for each
  //! split from the map aMapON for the shape object identified
  //! by ShapeRank
  Standard_EXPORT   void FillSecEdgeAncestorMap (const Standard_Integer aShapeRank, const TopTools_MapOfShape& aMapON, TopTools_DataMapOfShapeShape& anAncMap)  const;
  
  //! return all section edges.
  Standard_EXPORT   void Section (TopTools_ListOfShape& L) ;
  
  Standard_EXPORT  const  TopTools_ListOfShape& Section() ;
  
  //! update the DS by creating new geometries.
  //! create vertices on DS points.
  Standard_EXPORT   void BuildVertices (const Handle(TopOpeBRepDS_HDataStructure)& DS) ;
  
  //! update the DS by creating new geometries.
  //! create shapes from the new geometries.
  Standard_EXPORT   void BuildEdges (const Handle(TopOpeBRepDS_HDataStructure)& DS) ;
  
  Standard_EXPORT  const  TopOpeBRepDS_DataMapOfShapeListOfShapeOn1State& MSplit (const TopAbs_State s)  const;
  
  Standard_EXPORT   TopOpeBRepDS_DataMapOfShapeListOfShapeOn1State& ChangeMSplit (const TopAbs_State s) ;
  
  Standard_EXPORT   void MakeEdges (const TopoDS_Shape& E, TopOpeBRepBuild_EdgeBuilder& B, TopTools_ListOfShape& L) ;
  
  Standard_EXPORT   void MakeFaces (const TopoDS_Shape& F, TopOpeBRepBuild_FaceBuilder& B, TopTools_ListOfShape& L) ;
  
  Standard_EXPORT   void MakeSolids (TopOpeBRepBuild_SolidBuilder& B, TopTools_ListOfShape& L) ;
  
  Standard_EXPORT   void MakeShells (TopOpeBRepBuild_SolidBuilder& B, TopTools_ListOfShape& L) ;
  
  //! Returns a ref.on the list of shapes connected to <S> as
  //! <TB> split parts of <S>.
  //! Mark <S> as split in <TB> parts.
  Standard_EXPORT   TopTools_ListOfShape& ChangeSplit (const TopoDS_Shape& S, const TopAbs_State TB) ;
  
  Standard_EXPORT   Standard_Boolean Opec12()  const;
  
  Standard_EXPORT   Standard_Boolean Opec21()  const;
  
  Standard_EXPORT   Standard_Boolean Opecom()  const;
  
  Standard_EXPORT   Standard_Boolean Opefus()  const;
  
  Standard_EXPORT   TopAbs_State ShapePosition (const TopoDS_Shape& S, const TopTools_ListOfShape& LS) ;
  
  Standard_EXPORT   Standard_Boolean KeepShape (const TopoDS_Shape& S, const TopTools_ListOfShape& LS, const TopAbs_State T) ;
  
  Standard_EXPORT static   TopAbs_ShapeEnum TopType (const TopoDS_Shape& S) ;
  
  Standard_EXPORT static   Standard_Boolean Reverse (const TopAbs_State T1, const TopAbs_State T2) ;
  
  Standard_EXPORT static   TopAbs_Orientation Orient (const TopAbs_Orientation O, const Standard_Boolean R) ;
  
  Standard_EXPORT   void FindSameDomain (TopTools_ListOfShape& L1, TopTools_ListOfShape& L2)  const;
  
  Standard_EXPORT   void FindSameDomainSameOrientation (TopTools_ListOfShape& LSO, TopTools_ListOfShape& LDO)  const;
  
  Standard_EXPORT   void MapShapes (const TopoDS_Shape& S1, const TopoDS_Shape& S2) ;
  
  Standard_EXPORT   void ClearMaps() ;
  
  Standard_EXPORT   void FindSameRank (const TopTools_ListOfShape& L1, const Standard_Integer R, TopTools_ListOfShape& L2)  const;
  
  Standard_EXPORT   Standard_Integer ShapeRank (const TopoDS_Shape& S)  const;
  
  Standard_EXPORT   Standard_Boolean IsShapeOf (const TopoDS_Shape& S, const Standard_Integer I12)  const;
  
  Standard_EXPORT static   Standard_Boolean Contains (const TopoDS_Shape& S, const TopTools_ListOfShape& L) ;
  
  Standard_EXPORT   Standard_Integer FindIsKPart() ;
  
  Standard_EXPORT   Standard_Integer IsKPart()  const;
  
  Standard_EXPORT virtual   void MergeKPart() ;
  
  Standard_EXPORT virtual   void MergeKPart (const TopAbs_State TB1, const TopAbs_State TB2) ;
  
  Standard_EXPORT   void MergeKPartiskole() ;
  
  Standard_EXPORT   void MergeKPartiskoletge() ;
  
  Standard_EXPORT   void MergeKPartisdisj() ;
  
  Standard_EXPORT   void MergeKPartisfafa() ;
  
  Standard_EXPORT   void MergeKPartissoso() ;
  
  Standard_EXPORT   Standard_Integer KPiskole() ;
  
  Standard_EXPORT   Standard_Integer KPiskoletge() ;
  
  Standard_EXPORT   Standard_Integer KPisdisj() ;
  
  Standard_EXPORT   Standard_Integer KPisfafa() ;
  
  Standard_EXPORT   Standard_Integer KPissoso() ;
  
  Standard_EXPORT   void KPClearMaps() ;
  
  Standard_EXPORT   Standard_Integer KPlhg (const TopoDS_Shape& S, const TopAbs_ShapeEnum T, TopTools_ListOfShape& L)  const;
  
  Standard_EXPORT   Standard_Integer KPlhg (const TopoDS_Shape& S, const TopAbs_ShapeEnum T)  const;
  
  Standard_EXPORT   Standard_Integer KPlhsd (const TopoDS_Shape& S, const TopAbs_ShapeEnum T, TopTools_ListOfShape& L)  const;
  
  Standard_EXPORT   Standard_Integer KPlhsd (const TopoDS_Shape& S, const TopAbs_ShapeEnum T)  const;
  
  Standard_EXPORT   TopAbs_State KPclasSS (const TopoDS_Shape& S1, const TopTools_ListOfShape& exceptLS1, const TopoDS_Shape& S2) ;
  
  Standard_EXPORT   TopAbs_State KPclasSS (const TopoDS_Shape& S1, const TopoDS_Shape& exceptS1, const TopoDS_Shape& S2) ;
  
  Standard_EXPORT   TopAbs_State KPclasSS (const TopoDS_Shape& S1, const TopoDS_Shape& S2) ;
  
  Standard_EXPORT   Standard_Boolean KPiskolesh (const TopoDS_Shape& S, TopTools_ListOfShape& LS, TopTools_ListOfShape& LF)  const;
  
  Standard_EXPORT   Standard_Boolean KPiskoletgesh (const TopoDS_Shape& S, TopTools_ListOfShape& LS, TopTools_ListOfShape& LF)  const;
  
  Standard_EXPORT   void KPSameDomain (TopTools_ListOfShape& L1, TopTools_ListOfShape& L2)  const;
  
  Standard_EXPORT   Standard_Integer KPisdisjsh (const TopoDS_Shape& S)  const;
  
  Standard_EXPORT   Standard_Integer KPisfafash (const TopoDS_Shape& S)  const;
  
  Standard_EXPORT   Standard_Integer KPissososh (const TopoDS_Shape& S)  const;
  
  Standard_EXPORT   void KPiskoleanalyse (const TopAbs_State FT1, const TopAbs_State FT2, const TopAbs_State ST1, const TopAbs_State ST2, Standard_Integer& I, Standard_Integer& I1, Standard_Integer& I2)  const;
  
  Standard_EXPORT   void KPiskoletgeanalyse (const TopOpeBRepDS_Config Conf, const TopAbs_State ST1, const TopAbs_State ST2, Standard_Integer& I)  const;
  
  Standard_EXPORT   void KPisdisjanalyse (const TopAbs_State ST1, const TopAbs_State ST2, Standard_Integer& I, Standard_Integer& IC1, Standard_Integer& IC2)  const;
  
  Standard_EXPORT static   Standard_Integer KPls (const TopoDS_Shape& S, const TopAbs_ShapeEnum T, TopTools_ListOfShape& L) ;
  
  Standard_EXPORT static   Standard_Integer KPls (const TopoDS_Shape& S, const TopAbs_ShapeEnum T) ;
  
  Standard_EXPORT   TopAbs_State KPclassF (const TopoDS_Shape& F1, const TopoDS_Shape& F2) ;
  
  Standard_EXPORT   void KPclassFF (const TopoDS_Shape& F1, const TopoDS_Shape& F2, TopAbs_State& T1, TopAbs_State& T2) ;
  
  Standard_EXPORT   Standard_Boolean KPiskoleFF (const TopoDS_Shape& F1, const TopoDS_Shape& F2, TopAbs_State& T1, TopAbs_State& T2) ;
  
  Standard_EXPORT static   Standard_Boolean KPContains (const TopoDS_Shape& S, const TopTools_ListOfShape& L) ;
  
  Standard_EXPORT   TopoDS_Shape KPmakeface (const TopoDS_Shape& F1, const TopTools_ListOfShape& LF2, const TopAbs_State T1, const TopAbs_State T2, const Standard_Boolean R1, const Standard_Boolean R2) ;
  
  Standard_EXPORT static   Standard_Integer KPreturn (const Standard_Integer KP) ;
  
  Standard_EXPORT   void SplitEvisoONperiodicF() ;
  
  Standard_EXPORT   void GMergeSolids (const TopTools_ListOfShape& LSO1, const TopTools_ListOfShape& LSO2, const TopOpeBRepBuild_GTopo& G) ;
  
  Standard_EXPORT   void GFillSolidsSFS (const TopTools_ListOfShape& LSO1, const TopTools_ListOfShape& LSO2, const TopOpeBRepBuild_GTopo& G, TopOpeBRepBuild_ShellFaceSet& SFS) ;
  
  Standard_EXPORT virtual   void GFillSolidSFS (const TopoDS_Shape& SO1, const TopTools_ListOfShape& LSO2, const TopOpeBRepBuild_GTopo& G, TopOpeBRepBuild_ShellFaceSet& SFS) ;
  
  Standard_EXPORT   void GFillSurfaceTopologySFS (const TopoDS_Shape& SO1, const TopOpeBRepBuild_GTopo& G, TopOpeBRepBuild_ShellFaceSet& SFS) ;
  
  Standard_EXPORT   void GFillSurfaceTopologySFS (const TopOpeBRepDS_SurfaceIterator& IT, const TopOpeBRepBuild_GTopo& G, TopOpeBRepBuild_ShellFaceSet& SFS)  const;
  
  Standard_EXPORT virtual   void GFillShellSFS (const TopoDS_Shape& SH1, const TopTools_ListOfShape& LSO2, const TopOpeBRepBuild_GTopo& G, TopOpeBRepBuild_ShellFaceSet& SFS) ;
  
  Standard_EXPORT   void GFillFaceSFS (const TopoDS_Shape& F1, const TopTools_ListOfShape& LSO2, const TopOpeBRepBuild_GTopo& G, TopOpeBRepBuild_ShellFaceSet& SFS) ;
  
  Standard_EXPORT   void GSplitFaceSFS (const TopoDS_Shape& F1, const TopTools_ListOfShape& LSclass, const TopOpeBRepBuild_GTopo& G, TopOpeBRepBuild_ShellFaceSet& SFS) ;
  
  Standard_EXPORT   void GMergeFaceSFS (const TopoDS_Shape& F, const TopOpeBRepBuild_GTopo& G, TopOpeBRepBuild_ShellFaceSet& SFS) ;
  
  Standard_EXPORT   void GSplitFace (const TopoDS_Shape& F, const TopOpeBRepBuild_GTopo& G, const TopTools_ListOfShape& LSclass) ;
  
  Standard_EXPORT   void AddONPatchesSFS (const TopOpeBRepBuild_GTopo& G, TopOpeBRepBuild_ShellFaceSet& SFS) ;
  
  Standard_EXPORT   void FillOnPatches (const TopTools_ListOfShape& anEdgesON, const TopoDS_Shape& aBaseFace, const TopTools_IndexedMapOfOrientedShape& avoidMap) ;
  
  Standard_EXPORT   void FindFacesTouchingEdge (const TopoDS_Shape& aFace, const TopoDS_Shape& anEdge, const Standard_Integer aShRank, TopTools_ListOfShape& aFaces)  const;
  
  Standard_EXPORT   void GMergeFaces (const TopTools_ListOfShape& LF1, const TopTools_ListOfShape& LF2, const TopOpeBRepBuild_GTopo& G) ;
  
  Standard_EXPORT   void GFillFacesWES (const TopTools_ListOfShape& LF1, const TopTools_ListOfShape& LF2, const TopOpeBRepBuild_GTopo& G, TopOpeBRepBuild_WireEdgeSet& WES) ;
  
  Standard_EXPORT   void GFillFacesWESK (const TopTools_ListOfShape& LF1, const TopTools_ListOfShape& LF2, const TopOpeBRepBuild_GTopo& G, TopOpeBRepBuild_WireEdgeSet& WES, const Standard_Integer K) ;
  
  Standard_EXPORT   void GFillFacesWESMakeFaces (const TopTools_ListOfShape& LF1, const TopTools_ListOfShape& LF2, const TopTools_ListOfShape& LSO, const TopOpeBRepBuild_GTopo& G) ;
  
  Standard_EXPORT   void GFillFaceWES (const TopoDS_Shape& F, const TopTools_ListOfShape& LF2, const TopOpeBRepBuild_GTopo& G, TopOpeBRepBuild_WireEdgeSet& WES) ;
  
  Standard_EXPORT   void GFillCurveTopologyWES (const TopoDS_Shape& F, const TopOpeBRepBuild_GTopo& G, TopOpeBRepBuild_WireEdgeSet& WES) ;
  
  Standard_EXPORT   void GFillCurveTopologyWES (const TopOpeBRepDS_CurveIterator& IT, const TopOpeBRepBuild_GTopo& G, TopOpeBRepBuild_WireEdgeSet& WES)  const;
  
  Standard_EXPORT   void GFillONPartsWES (const TopoDS_Shape& F, const TopOpeBRepBuild_GTopo& G, const TopTools_ListOfShape& LSclass, TopOpeBRepBuild_WireEdgeSet& WES) ;
  
  Standard_EXPORT   void GFillWireWES (const TopoDS_Shape& W, const TopTools_ListOfShape& LF2, const TopOpeBRepBuild_GTopo& G, TopOpeBRepBuild_WireEdgeSet& WES) ;
  
  Standard_EXPORT   void GFillEdgeWES (const TopoDS_Shape& E, const TopTools_ListOfShape& LF2, const TopOpeBRepBuild_GTopo& G, TopOpeBRepBuild_WireEdgeSet& WES) ;
  
  Standard_EXPORT   void GSplitEdgeWES (const TopoDS_Shape& E, const TopTools_ListOfShape& LF2, const TopOpeBRepBuild_GTopo& G, TopOpeBRepBuild_WireEdgeSet& WES) ;
  
  Standard_EXPORT   void GMergeEdgeWES (const TopoDS_Shape& E, const TopOpeBRepBuild_GTopo& G, TopOpeBRepBuild_WireEdgeSet& WES) ;
  
  Standard_EXPORT   void GSplitEdge (const TopoDS_Shape& E, const TopOpeBRepBuild_GTopo& G, const TopTools_ListOfShape& LSclass) ;
  
  Standard_EXPORT   void GMergeEdges (const TopTools_ListOfShape& LE1, const TopTools_ListOfShape& LE2, const TopOpeBRepBuild_GTopo& G) ;
  
  Standard_EXPORT   void GFillEdgesPVS (const TopTools_ListOfShape& LE1, const TopTools_ListOfShape& LE2, const TopOpeBRepBuild_GTopo& G, TopOpeBRepBuild_PaveSet& PVS) ;
  
  Standard_EXPORT   void GFillEdgePVS (const TopoDS_Shape& E, const TopTools_ListOfShape& LE2, const TopOpeBRepBuild_GTopo& G, TopOpeBRepBuild_PaveSet& PVS) ;
  
  Standard_EXPORT   void GFillPointTopologyPVS (const TopoDS_Shape& E, const TopOpeBRepBuild_GTopo& G, TopOpeBRepBuild_PaveSet& PVS) ;
  
  Standard_EXPORT   void GFillPointTopologyPVS (const TopoDS_Shape& E, const TopOpeBRepDS_PointIterator& IT, const TopOpeBRepBuild_GTopo& G, TopOpeBRepBuild_PaveSet& PVS)  const;
  
  Standard_EXPORT   Standard_Boolean GParamOnReference (const TopoDS_Vertex& V, const TopoDS_Edge& E, Standard_Real& P)  const;
  
  Standard_EXPORT   Standard_Boolean GKeepShape (const TopoDS_Shape& S, const TopTools_ListOfShape& Lref, const TopAbs_State T) ;
  
  //! return True if S is classified <T> / Lref shapes
  Standard_EXPORT   Standard_Boolean GKeepShape1 (const TopoDS_Shape& S, const TopTools_ListOfShape& Lref, const TopAbs_State T, TopAbs_State& pos) ;
  
  //! add to Lou the shapes of Lin classified <T> / Lref shapes.
  //! Lou is not cleared. (S is a dummy trace argument)
  Standard_EXPORT   void GKeepShapes (const TopoDS_Shape& S, const TopTools_ListOfShape& Lref, const TopAbs_State T, const TopTools_ListOfShape& Lin, TopTools_ListOfShape& Lou) ;
  
  Standard_EXPORT   void GSFSMakeSolids (const TopoDS_Shape& SOF, TopOpeBRepBuild_ShellFaceSet& SFS, TopTools_ListOfShape& LOSO) ;
  
  Standard_EXPORT   void GSOBUMakeSolids (const TopoDS_Shape& SOF, TopOpeBRepBuild_SolidBuilder& SOBU, TopTools_ListOfShape& LOSO) ;
  
  Standard_EXPORT virtual   void GWESMakeFaces (const TopoDS_Shape& FF, TopOpeBRepBuild_WireEdgeSet& WES, TopTools_ListOfShape& LOF) ;
  
  Standard_EXPORT   void GFABUMakeFaces (const TopoDS_Shape& FF, TopOpeBRepBuild_FaceBuilder& FABU, TopTools_ListOfShape& LOF, TopTools_DataMapOfShapeInteger& MWisOld) ;
  
  Standard_EXPORT   void RegularizeFaces (const TopoDS_Shape& FF, const TopTools_ListOfShape& lnewFace, TopTools_ListOfShape& LOF) ;
  
  Standard_EXPORT   void RegularizeFace (const TopoDS_Shape& FF, const TopoDS_Shape& newFace, TopTools_ListOfShape& LOF) ;
  
  Standard_EXPORT   void RegularizeSolids (const TopoDS_Shape& SS, const TopTools_ListOfShape& lnewSolid, TopTools_ListOfShape& LOS) ;
  
  Standard_EXPORT   void RegularizeSolid (const TopoDS_Shape& SS, const TopoDS_Shape& newSolid, TopTools_ListOfShape& LOS) ;
  
  Standard_EXPORT   void GPVSMakeEdges (const TopoDS_Shape& EF, TopOpeBRepBuild_PaveSet& PVS, TopTools_ListOfShape& LOE)  const;
  
  Standard_EXPORT   void GEDBUMakeEdges (const TopoDS_Shape& EF, TopOpeBRepBuild_EdgeBuilder& EDBU, TopTools_ListOfShape& LOE)  const;
  
  Standard_EXPORT   Standard_Boolean GToSplit (const TopoDS_Shape& S, const TopAbs_State TB)  const;
  
  Standard_EXPORT   Standard_Boolean GToMerge (const TopoDS_Shape& S)  const;
  
  Standard_EXPORT static   Standard_Boolean GTakeCommonOfSame (const TopOpeBRepBuild_GTopo& G) ;
  
  Standard_EXPORT static   Standard_Boolean GTakeCommonOfDiff (const TopOpeBRepBuild_GTopo& G) ;
  
  Standard_EXPORT   void GFindSamDom (const TopoDS_Shape& S, TopTools_ListOfShape& L1, TopTools_ListOfShape& L2)  const;
  
  Standard_EXPORT   void GFindSamDom (TopTools_ListOfShape& L1, TopTools_ListOfShape& L2)  const;
  
  Standard_EXPORT   void GFindSamDomSODO (const TopoDS_Shape& S, TopTools_ListOfShape& LSO, TopTools_ListOfShape& LDO)  const;
  
  Standard_EXPORT   void GFindSamDomSODO (TopTools_ListOfShape& LSO, TopTools_ListOfShape& LDO)  const;
  
  Standard_EXPORT   void GMapShapes (const TopoDS_Shape& S1, const TopoDS_Shape& S2) ;
  
  Standard_EXPORT   void GClearMaps() ;
  
  Standard_EXPORT   void GFindSameRank (const TopTools_ListOfShape& L1, const Standard_Integer R, TopTools_ListOfShape& L2)  const;
  
  Standard_EXPORT   Standard_Integer GShapeRank (const TopoDS_Shape& S)  const;
  
  Standard_EXPORT   Standard_Boolean GIsShapeOf (const TopoDS_Shape& S, const Standard_Integer I12)  const;
  
  Standard_EXPORT static   Standard_Boolean GContains (const TopoDS_Shape& S, const TopTools_ListOfShape& L) ;
  
  Standard_EXPORT static   void GCopyList (const TopTools_ListOfShape& Lin, const Standard_Integer i1, const Standard_Integer i2, TopTools_ListOfShape& Lou) ;
  
  Standard_EXPORT static   void GCopyList (const TopTools_ListOfShape& Lin, TopTools_ListOfShape& Lou) ;
  
  Standard_EXPORT   void GdumpLS (const TopTools_ListOfShape& L)  const;
  
  Standard_EXPORT static   void GdumpPNT (const gp_Pnt& P) ;
  
  Standard_EXPORT static   void GdumpORIPARPNT (const TopAbs_Orientation o, const Standard_Real p, const gp_Pnt& Pnt) ;
  
  Standard_EXPORT   void GdumpSHA (const TopoDS_Shape& S, const Standard_Address str = NULL)  const;
  
  Standard_EXPORT   void GdumpSHAORI (const TopoDS_Shape& S, const Standard_Address str = NULL)  const;
  
  Standard_EXPORT   void GdumpSHAORIGEO (const TopoDS_Shape& S, const Standard_Address str = NULL)  const;
  
  Standard_EXPORT   void GdumpSHASTA (const Standard_Integer iS, const TopAbs_State T, const TCollection_AsciiString& a = "", const TCollection_AsciiString& b = "")  const;
  
  Standard_EXPORT   void GdumpSHASTA (const TopoDS_Shape& S, const TopAbs_State T, const TCollection_AsciiString& a = "", const TCollection_AsciiString& b = "")  const;
  
  Standard_EXPORT   void GdumpSHASTA (const Standard_Integer iS, const TopAbs_State T, const TopOpeBRepBuild_ShapeSet& SS, const TCollection_AsciiString& a = "", const TCollection_AsciiString& b = "", const TCollection_AsciiString& c = "\n")  const;
  
  Standard_EXPORT   void GdumpEDG (const TopoDS_Shape& S, const Standard_Address str = NULL)  const;
  
  Standard_EXPORT   void GdumpEDGVER (const TopoDS_Shape& E, const TopoDS_Shape& V, const Standard_Address str = NULL)  const;
  
  Standard_EXPORT   void GdumpSAMDOM (const TopTools_ListOfShape& L, const Standard_Address str = NULL)  const;
  
  Standard_EXPORT   void GdumpEXP (const TopOpeBRepTool_ShapeExplorer& E)  const;
  
  Standard_EXPORT   void GdumpSOBU (TopOpeBRepBuild_SolidBuilder& SB)  const;
  
  Standard_EXPORT   void GdumpFABU (TopOpeBRepBuild_FaceBuilder& FB)  const;
  
  Standard_EXPORT   void GdumpEDBU (TopOpeBRepBuild_EdgeBuilder& EB)  const;
  
  Standard_EXPORT   Standard_Boolean GtraceSPS (const Standard_Integer iS)  const;
  
  Standard_EXPORT   Standard_Boolean GtraceSPS (const Standard_Integer iS, const Standard_Integer jS)  const;
  
  Standard_EXPORT   Standard_Boolean GtraceSPS (const TopoDS_Shape& S)  const;
  
  Standard_EXPORT   Standard_Boolean GtraceSPS (const TopoDS_Shape& S, Standard_Integer& IS)  const;
  
  Standard_EXPORT   void GdumpSHASETreset() ;
  
  Standard_EXPORT   Standard_Integer GdumpSHASETindex() ;
  
  Standard_EXPORT static   void PrintGeo (const TopoDS_Shape& S) ;
  
  Standard_EXPORT static   void PrintSur (const TopoDS_Face& F) ;
  
  Standard_EXPORT static   void PrintCur (const TopoDS_Edge& E) ;
  
  Standard_EXPORT static   void PrintPnt (const TopoDS_Vertex& V) ;
  
  Standard_EXPORT static   void PrintOri (const TopoDS_Shape& S) ;
  
  Standard_EXPORT static   TCollection_AsciiString StringState (const TopAbs_State S) ;
  
  Standard_EXPORT static   Standard_Boolean GcheckNBOUNDS (const TopoDS_Shape& E) ;


friend class TopOpeBRepBuild_HBuilder;


protected:

  
  //! update the DS by creating new geometries.
  //! create edges on the new curve <Icurv>.
  Standard_EXPORT   void BuildEdges (const Standard_Integer iC, const Handle(TopOpeBRepDS_HDataStructure)& DS) ;
  
  //! update the DS by creating new geometries.
  //! create faces on the new surface <ISurf>.
  Standard_EXPORT   void BuildFaces (const Standard_Integer iS, const Handle(TopOpeBRepDS_HDataStructure)& DS) ;
  
  //! update the DS by creating new geometries.
  //! create shapes from the new geometries.
  Standard_EXPORT   void BuildFaces (const Handle(TopOpeBRepDS_HDataStructure)& DS) ;
  
  //! Split <E1> keeping the parts of state <TB1>.
  Standard_EXPORT   void SplitEdge (const TopoDS_Shape& E1, const TopAbs_State TB1, const TopAbs_State TB2) ;
  
  //! Split <E1> keeping the parts of state <TB1>.
  Standard_EXPORT   void SplitEdge1 (const TopoDS_Shape& E1, const TopAbs_State TB1, const TopAbs_State TB2) ;
  
  //! Split <E1> keeping the parts of state <TB1>.
  Standard_EXPORT   void SplitEdge2 (const TopoDS_Shape& E1, const TopAbs_State TB1, const TopAbs_State TB2) ;
  
  //! Split <F1> keeping the  parts of state  <TB1>.
  //! Merge faces with same domain, keeping parts  of
  //! state <TB2>.
  Standard_EXPORT   void SplitFace (const TopoDS_Shape& F1, const TopAbs_State TB1, const TopAbs_State TB2) ;
  
  Standard_EXPORT   void SplitFace1 (const TopoDS_Shape& F1, const TopAbs_State TB1, const TopAbs_State TB2) ;
  
  Standard_EXPORT   void SplitFace2 (const TopoDS_Shape& F1, const TopAbs_State TB1, const TopAbs_State TB2) ;
  
  //! Split <S1> keeping the parts of state <TB1>.
  Standard_EXPORT   void SplitSolid (const TopoDS_Shape& S1, const TopAbs_State TB1, const TopAbs_State TB2) ;
  
  //! Explore shapes of given  by explorer <Ex> to split them.
  //! Store  new shapes in the set <SS>.
  //! According to RevOri, reverse or not their orientation.
  Standard_EXPORT   void SplitShapes (TopOpeBRepTool_ShapeExplorer& Ex, const TopAbs_State TB1, const TopAbs_State TB2, TopOpeBRepBuild_ShapeSet& SS, const Standard_Boolean RevOri) ;
  
  //! Split edges of <F1> and store  wires and edges in
  //! the set <WES>. According to RevOri, reverse (or not) orientation.
  Standard_EXPORT   void FillFace (const TopoDS_Shape& F1, const TopAbs_State TB1, const TopTools_ListOfShape& LF2, const TopAbs_State TB2, TopOpeBRepBuild_WireEdgeSet& WES, const Standard_Boolean RevOri) ;
  
  //! Split faces of <S1> and store shells  and faces in
  //! the set <SS>. According to RevOri, reverse (or not) orientation.
  Standard_EXPORT   void FillSolid (const TopoDS_Shape& S1, const TopAbs_State TB1, const TopTools_ListOfShape& LS2, const TopAbs_State TB2, TopOpeBRepBuild_ShapeSet& SS, const Standard_Boolean RevOri) ;
  
  //! Split subshapes of <S1> and store subshapes in
  //! the set <SS>. According to RevOri, reverse (or not) orientation.
  Standard_EXPORT   void FillShape (const TopoDS_Shape& S1, const TopAbs_State TB1, const TopTools_ListOfShape& LS2, const TopAbs_State TB2, TopOpeBRepBuild_ShapeSet& SS, const Standard_Boolean RevOri) ;
  
  //! fills the vertex set PVS with the point iterator IT.
  //! IT accesses a list of interferences which geometry is a point or a vertex.
  //! TB indicates the orientation to give to the geometries
  //! found in interference list accessed by IT.
  Standard_EXPORT   void FillVertexSet (TopOpeBRepDS_PointIterator& IT, const TopAbs_State TB, TopOpeBRepBuild_PaveSet& PVS)  const;
  
  //! fills vertex set PVS with the current value of IT.
  //! I geometry is a point or a vertex.
  //! TB  indicates the orientation to give to geometries found I
  Standard_EXPORT   void FillVertexSetOnValue (const TopOpeBRepDS_PointIterator& IT, const TopAbs_State TB, TopOpeBRepBuild_PaveSet& PVS)  const;
  
  //! Returns True if the shape <S> has not already been split
  Standard_EXPORT   Standard_Boolean ToSplit (const TopoDS_Shape& S, const TopAbs_State TB)  const;
  
  //! add the shape <S> to the map of split shapes.
  //! mark <S> as split/not split on <state>, according to B value.
  Standard_EXPORT   void MarkSplit (const TopoDS_Shape& S, const TopAbs_State TB, const Standard_Boolean B = Standard_True) ;
  
  //! Returns a ref. on the list of shapes connected to <S> as
  //! <TB> merged parts of <S>.
  Standard_EXPORT   TopTools_ListOfShape& ChangeMerged (const TopoDS_Shape& S, const TopAbs_State TB) ;
  
  //! Returns a ref. on the vertex created on point <I>.
  Standard_EXPORT   TopoDS_Shape& ChangeNewVertex (const Standard_Integer I) ;
  
  //! Returns a ref. on the list of edges created on curve <I>.
  Standard_EXPORT   TopTools_ListOfShape& ChangeNewEdges (const Standard_Integer I) ;
  
  //! Returns a ref. on the list of faces created on surface <I>.
  Standard_EXPORT   TopTools_ListOfShape& ChangeNewFaces (const Standard_Integer I) ;
  
  Standard_EXPORT   void AddIntersectionEdges (TopoDS_Shape& F, const TopAbs_State TB, const Standard_Boolean RevOri, TopOpeBRepBuild_ShapeSet& ES)  const;
  
  Standard_EXPORT   void UpdateSplitAndMerged (const TopTools_DataMapOfIntegerListOfShape& mle, const TopTools_DataMapOfIntegerShape& mre, const TopTools_DataMapOfShapeShape& mlf, const TopAbs_State state) ;


  TopAbs_State myState1;
  TopAbs_State myState2;
  TopoDS_Shape myShape1;
  TopoDS_Shape myShape2;
  Handle(TopOpeBRepDS_HDataStructure) myDataStructure;
  TopOpeBRepDS_BuildTool myBuildTool;
  Handle(TopTools_HArray1OfShape) myNewVertices;
  TopTools_DataMapOfIntegerListOfShape myNewEdges;
  Handle(TopTools_HArray1OfListOfShape) myNewFaces;
  TopOpeBRepDS_DataMapOfShapeListOfShapeOn1State mySplitIN;
  TopOpeBRepDS_DataMapOfShapeListOfShapeOn1State mySplitON;
  TopOpeBRepDS_DataMapOfShapeListOfShapeOn1State mySplitOUT;
  TopOpeBRepDS_DataMapOfShapeListOfShapeOn1State myMergedIN;
  TopOpeBRepDS_DataMapOfShapeListOfShapeOn1State myMergedON;
  TopOpeBRepDS_DataMapOfShapeListOfShapeOn1State myMergedOUT;
  TopTools_ListOfShape myEmptyShapeList;
  TopTools_ListOfShape myListOfSolid;
  TopTools_ListOfShape myListOfFace;
  TopTools_ListOfShape myListOfEdge;
  TopTools_DataMapOfShapeListOfShape myFSplits;
  TopTools_DataMapOfShapeListOfShape myESplits;
  Standard_Boolean mySectionDone;
  Standard_Boolean mySplitSectionEdgesDone;
  TopTools_ListOfShape mySection;
  TopoDS_Solid mySolidReference;
  TopoDS_Solid mySolidToFill;
  TopTools_ListOfShape myFaceAvoid;
  TopoDS_Face myFaceReference;
  TopoDS_Face myFaceToFill;
  TopTools_ListOfShape myEdgeAvoid;
  TopoDS_Edge myEdgeReference;
  TopoDS_Edge myEdgeToFill;
  TopTools_ListOfShape myVertexAvoid;
  TopTools_IndexedMapOfShape myMAP1;
  TopTools_IndexedMapOfShape myMAP2;
  Standard_Integer myIsKPart;
  TopTools_DataMapOfShapeListOfShape myKPMAPf1f2;
  Standard_Integer mySHASETindex;
  Standard_Boolean myClassifyDef;
  Standard_Boolean myClassifyVal;
  TopOpeBRepTool_ShapeClassifier myShapeClassifier;
  TopTools_MapOfShape myMemoSplit;
  TCollection_AsciiString myEmptyAS;
  Standard_Boolean myProcessON;
  TopTools_IndexedDataMapOfShapeShape myONFacesMap;
  TopTools_IndexedMapOfOrientedShape myONElemMap;


private:





};







#endif // _TopOpeBRepBuild_Builder_HeaderFile
