// Created on: 1993-06-14 // Created by: Jean Yves LEBEY // Copyright (c) 1993-1999 Matra Datavision // Copyright (c) 1999-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 _TopOpeBRepBuild_Builder_HeaderFile #define _TopOpeBRepBuild_Builder_HeaderFile #include "Standard.hxx" #include "Standard_DefineAlloc.hxx" #include "Standard_Handle.hxx" #include "TopAbs_State.hxx" #include "TopoDS_Shape.hxx" #include "TopOpeBRepDS_BuildTool.hxx" #include "TopTools_HArray1OfShape.hxx" #include "TopTools_DataMapOfIntegerListOfShape.hxx" #include "TopTools_HArray1OfListOfShape.hxx" #include "TopOpeBRepDS_DataMapOfShapeListOfShapeOn1State.hxx" #include "TopTools_ListOfShape.hxx" #include "TopTools_DataMapOfShapeListOfShape.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 "TopTools_DataMapOfShapeShape.hxx" #include "TopAbs_ShapeEnum.hxx" #include "TopAbs_Orientation.hxx" #include "TopTools_DataMapOfIntegerShape.hxx" #include "TopOpeBRepDS_Config.hxx" #include "TopTools_DataMapOfShapeInteger.hxx" class TopOpeBRepDS_HDataStructure; 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 TopOpeBRepBuild_GTopo; class TopOpeBRepBuild_ShellFaceSet; class TopOpeBRepDS_SurfaceIterator; class TopOpeBRepDS_CurveIterator; class TopoDS_Vertex; class gp_Pnt; // resolve name collisions with X11 headers #ifdef FillSolid #undef FillSolid #endif //! 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 ~TopOpeBRepBuild_Builder(); Standard_EXPORT TopOpeBRepDS_BuildTool& ChangeBuildTool(); Standard_EXPORT const TopOpeBRepDS_BuildTool& BuildTool() const; //! Stores the data structure , //! Create shapes from the new geometries. Standard_EXPORT virtual void Perform(const Handle(TopOpeBRepDS_HDataStructure)& HDS); //! Stores the data structure , //! 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 and keeping the //! parts in each edge of states and . //! Booleans onA, onB, onAB indicate whether 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 and keeping the //! parts in each face of states and . 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 and keeping the //! parts in each solid of states and . Standard_EXPORT void MergeSolids(const TopoDS_Shape& S1, const TopAbs_State TB1, const TopoDS_Shape& S2, const TopAbs_State TB2); //! Merges the two shapes and keeping the //! parts of states , in ,. 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 keeping the //! parts of state . Standard_EXPORT void MergeSolid(const TopoDS_Shape& S, const TopAbs_State TB); //! Returns the vertex created on point . Standard_EXPORT const TopoDS_Shape& NewVertex(const Standard_Integer I) const; //! Returns the edges created on curve . Standard_EXPORT const TopTools_ListOfShape& NewEdges(const Standard_Integer I) const; //! Returns the faces created on surface . Standard_EXPORT const TopTools_ListOfShape& NewFaces(const Standard_Integer I) const; //! Returns True if the shape has been split. Standard_EXPORT Standard_Boolean IsSplit(const TopoDS_Shape& S, const TopAbs_State TB) const; //! Returns the split parts of shape . Standard_EXPORT const TopTools_ListOfShape& Splits(const TopoDS_Shape& S, const TopAbs_State TB) const; //! Returns True if the shape has been merged. Standard_EXPORT Standard_Boolean IsMerged(const TopoDS_Shape& S, const TopAbs_State TB) const; //! Returns the merged parts of shape . 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 as //! split parts of . //! Mark as split in 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 / 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 / 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 . 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 . 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 keeping the parts of state . Standard_EXPORT void SplitEdge(const TopoDS_Shape& E1, const TopAbs_State TB1, const TopAbs_State TB2); //! Split keeping the parts of state . Standard_EXPORT void SplitEdge1(const TopoDS_Shape& E1, const TopAbs_State TB1, const TopAbs_State TB2); //! Split keeping the parts of state . Standard_EXPORT void SplitEdge2(const TopoDS_Shape& E1, const TopAbs_State TB1, const TopAbs_State TB2); //! Split keeping the parts of state . //! Merge faces with same domain, keeping parts of //! state . 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 keeping the parts of state . Standard_EXPORT void SplitSolid(const TopoDS_Shape& S1, const TopAbs_State TB1, const TopAbs_State TB2); //! Explore shapes of given by explorer to split them. //! Store new shapes in the set . //! 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 and store wires and edges in //! the set . 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 and store shells and faces in //! the set . 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 and store subshapes in //! the set . 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 has not already been split Standard_EXPORT Standard_Boolean ToSplit(const TopoDS_Shape& S, const TopAbs_State TB) const; //! add the shape to the map of split shapes. //! mark as split/not split on , 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 as //! merged parts of . Standard_EXPORT TopTools_ListOfShape& ChangeMerged(const TopoDS_Shape& S, const TopAbs_State TB); //! Returns a ref. on the vertex created on point . Standard_EXPORT TopoDS_Shape& ChangeNewVertex(const Standard_Integer I); //! Returns a ref. on the list of edges created on curve . Standard_EXPORT TopTools_ListOfShape& ChangeNewEdges(const Standard_Integer I); //! Returns a ref. on the list of faces created on surface . 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