Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 10:05:25

0001 // Created on: 1993-06-14
0002 // Created by: Jean Yves LEBEY
0003 // Copyright (c) 1993-1999 Matra Datavision
0004 // Copyright (c) 1999-2014 OPEN CASCADE SAS
0005 //
0006 // This file is part of Open CASCADE Technology software library.
0007 //
0008 // This library is free software; you can redistribute it and/or modify it under
0009 // the terms of the GNU Lesser General Public License version 2.1 as published
0010 // by the Free Software Foundation, with special exception defined in the file
0011 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
0012 // distribution for complete text of the license and disclaimer of any warranty.
0013 //
0014 // Alternatively, this file may be used under the terms of Open CASCADE
0015 // commercial license or contractual agreement.
0016 
0017 #ifndef _TopOpeBRepBuild_Builder_HeaderFile
0018 #define _TopOpeBRepBuild_Builder_HeaderFile
0019 
0020 #include <Standard.hxx>
0021 #include <Standard_DefineAlloc.hxx>
0022 #include <Standard_Handle.hxx>
0023 
0024 #include <TopAbs_State.hxx>
0025 #include <TopoDS_Shape.hxx>
0026 #include <TopOpeBRepDS_BuildTool.hxx>
0027 #include <TopTools_HArray1OfShape.hxx>
0028 #include <TopTools_DataMapOfIntegerListOfShape.hxx>
0029 #include <TopTools_HArray1OfListOfShape.hxx>
0030 #include <TopOpeBRepDS_DataMapOfShapeListOfShapeOn1State.hxx>
0031 #include <TopTools_ListOfShape.hxx>
0032 #include <TopTools_DataMapOfShapeListOfShape.hxx>
0033 #include <TopoDS_Solid.hxx>
0034 #include <TopoDS_Face.hxx>
0035 #include <TopoDS_Edge.hxx>
0036 #include <TopTools_IndexedMapOfShape.hxx>
0037 #include <Standard_Integer.hxx>
0038 #include <TopOpeBRepTool_ShapeClassifier.hxx>
0039 #include <TopTools_MapOfShape.hxx>
0040 #include <TCollection_AsciiString.hxx>
0041 #include <TopTools_IndexedDataMapOfShapeShape.hxx>
0042 #include <TopTools_IndexedMapOfOrientedShape.hxx>
0043 #include <TopTools_DataMapOfShapeShape.hxx>
0044 #include <TopAbs_ShapeEnum.hxx>
0045 #include <TopAbs_Orientation.hxx>
0046 #include <TopTools_DataMapOfIntegerShape.hxx>
0047 #include <TopOpeBRepDS_Config.hxx>
0048 #include <TopTools_DataMapOfShapeInteger.hxx>
0049 class TopOpeBRepDS_HDataStructure;
0050 class TopOpeBRepTool_ShapeExplorer;
0051 class TopOpeBRepBuild_ShapeSet;
0052 class TopOpeBRepBuild_EdgeBuilder;
0053 class TopOpeBRepBuild_FaceBuilder;
0054 class TopOpeBRepBuild_SolidBuilder;
0055 class TopOpeBRepBuild_WireEdgeSet;
0056 class TopOpeBRepDS_PointIterator;
0057 class TopOpeBRepBuild_PaveSet;
0058 class TopOpeBRepBuild_GTopo;
0059 class TopOpeBRepBuild_ShellFaceSet;
0060 class TopOpeBRepDS_SurfaceIterator;
0061 class TopOpeBRepDS_CurveIterator;
0062 class TopoDS_Vertex;
0063 class gp_Pnt;
0064 
0065 // resolve name collisions with X11 headers
0066 #ifdef FillSolid
0067   #undef FillSolid
0068 #endif
0069 
0070 //! The Builder  algorithm    constructs   topological
0071 //! objects  from   an    existing  topology  and  new
0072 //! geometries attached to the topology. It is used to
0073 //! construct the result of a topological operation;
0074 //! the existing  topologies are the parts involved in
0075 //! the  topological  operation and the new geometries
0076 //! are the intersection lines and points.
0077 class TopOpeBRepBuild_Builder 
0078 {
0079 public:
0080 
0081   DEFINE_STANDARD_ALLOC
0082 
0083   
0084   Standard_EXPORT TopOpeBRepBuild_Builder(const TopOpeBRepDS_BuildTool& BT);
0085   
0086   Standard_EXPORT virtual ~TopOpeBRepBuild_Builder();
0087   
0088   Standard_EXPORT TopOpeBRepDS_BuildTool& ChangeBuildTool();
0089   
0090   Standard_EXPORT const TopOpeBRepDS_BuildTool& BuildTool() const;
0091   
0092   //! Stores the data structure <HDS>,
0093   //! Create shapes from the new geometries.
0094   Standard_EXPORT virtual void Perform (const Handle(TopOpeBRepDS_HDataStructure)& HDS);
0095   
0096   //! Stores the data structure <HDS>,
0097   //! Create shapes from the new geometries,
0098   //! Evaluates if an operation performed on shapes S1,S2
0099   //! is a particular case.
0100   Standard_EXPORT virtual void Perform (const Handle(TopOpeBRepDS_HDataStructure)& HDS, const TopoDS_Shape& S1, const TopoDS_Shape& S2);
0101   
0102   //! returns the DS handled by this builder
0103   Standard_EXPORT Handle(TopOpeBRepDS_HDataStructure) DataStructure() const;
0104   
0105   //! Removes all splits and merges already performed.
0106   //! Does NOT clear the handled DS.
0107   Standard_EXPORT virtual void Clear();
0108   
0109   //! Merges  the two edges <S1> and <S2> keeping the
0110   //! parts in each edge of states <TB1> and <TB2>.
0111   //! Booleans onA, onB, onAB indicate whether parts of edges
0112   //! found as state ON respectively on first, second, and both
0113   //! shapes must be (or not) built.
0114   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);
0115   
0116   //! Merges  the two faces <S1>   and <S2> keeping the
0117   //! parts in each face of states <TB1> and <TB2>.
0118   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);
0119   
0120   //! Merges  the two solids <S1>   and <S2> keeping the
0121   //! parts in each solid of states <TB1> and <TB2>.
0122   Standard_EXPORT void MergeSolids (const TopoDS_Shape& S1, const TopAbs_State TB1, const TopoDS_Shape& S2, const TopAbs_State TB2);
0123   
0124   //! Merges the two shapes <S1> and <S2> keeping the
0125   //! parts of states <TB1>,<TB2> in <S1>,<S2>.
0126   Standard_EXPORT void MergeShapes (const TopoDS_Shape& S1, const TopAbs_State TB1, const TopoDS_Shape& S2, const TopAbs_State TB2);
0127   
0128   Standard_EXPORT void End();
0129   
0130   Standard_EXPORT Standard_Boolean Classify() const;
0131   
0132   Standard_EXPORT void ChangeClassify (const Standard_Boolean B);
0133   
0134   //! Merges the solid <S>  keeping the
0135   //! parts of state <TB>.
0136   Standard_EXPORT void MergeSolid (const TopoDS_Shape& S, const TopAbs_State TB);
0137   
0138   //! Returns the vertex created on point <I>.
0139   Standard_EXPORT const TopoDS_Shape& NewVertex (const Standard_Integer I) const;
0140   
0141   //! Returns the edges created on curve <I>.
0142   Standard_EXPORT const TopTools_ListOfShape& NewEdges (const Standard_Integer I) const;
0143   
0144   //! Returns the faces created on surface <I>.
0145   Standard_EXPORT const TopTools_ListOfShape& NewFaces (const Standard_Integer I) const;
0146   
0147   //! Returns True if the shape <S> has been split.
0148   Standard_EXPORT Standard_Boolean IsSplit (const TopoDS_Shape& S, const TopAbs_State TB) const;
0149   
0150   //! Returns the split parts <TB> of shape <S>.
0151   Standard_EXPORT const TopTools_ListOfShape& Splits (const TopoDS_Shape& S, const TopAbs_State TB) const;
0152   
0153   //! Returns True if the shape <S> has been merged.
0154   Standard_EXPORT Standard_Boolean IsMerged (const TopoDS_Shape& S, const TopAbs_State TB) const;
0155   
0156   //! Returns the merged parts <TB> of shape <S>.
0157   Standard_EXPORT const TopTools_ListOfShape& Merged (const TopoDS_Shape& S, const TopAbs_State TB) const;
0158   
0159   Standard_EXPORT void InitSection();
0160   
0161   //! create parts ON solid of section edges
0162   Standard_EXPORT void SplitSectionEdges();
0163   
0164   //! create parts ON solid of section edges
0165   Standard_EXPORT virtual void SplitSectionEdge (const TopoDS_Shape& E);
0166   
0167   //! return the section edges built on new curves.
0168   Standard_EXPORT void SectionCurves (TopTools_ListOfShape& L);
0169   
0170   //! return the parts of edges found ON the boundary
0171   //! of the two arguments S1,S2 of Perform()
0172   Standard_EXPORT void SectionEdges (TopTools_ListOfShape& L);
0173   
0174   //! Fills anAncMap with pairs (edge,ancestor edge) for each
0175   //! split from the map aMapON for the shape object identified
0176   //! by ShapeRank
0177   Standard_EXPORT void FillSecEdgeAncestorMap (const Standard_Integer aShapeRank, const TopTools_MapOfShape& aMapON, TopTools_DataMapOfShapeShape& anAncMap) const;
0178   
0179   //! return all section edges.
0180   Standard_EXPORT void Section (TopTools_ListOfShape& L);
0181   
0182   Standard_EXPORT const TopTools_ListOfShape& Section();
0183   
0184   //! update the DS by creating new geometries.
0185   //! create vertices on DS points.
0186   Standard_EXPORT void BuildVertices (const Handle(TopOpeBRepDS_HDataStructure)& DS);
0187   
0188   //! update the DS by creating new geometries.
0189   //! create shapes from the new geometries.
0190   Standard_EXPORT void BuildEdges (const Handle(TopOpeBRepDS_HDataStructure)& DS);
0191   
0192   Standard_EXPORT const TopOpeBRepDS_DataMapOfShapeListOfShapeOn1State& MSplit (const TopAbs_State s) const;
0193   
0194   Standard_EXPORT TopOpeBRepDS_DataMapOfShapeListOfShapeOn1State& ChangeMSplit (const TopAbs_State s);
0195   
0196   Standard_EXPORT void MakeEdges (const TopoDS_Shape& E, TopOpeBRepBuild_EdgeBuilder& B, TopTools_ListOfShape& L);
0197   
0198   Standard_EXPORT void MakeFaces (const TopoDS_Shape& F, TopOpeBRepBuild_FaceBuilder& B, TopTools_ListOfShape& L);
0199   
0200   Standard_EXPORT void MakeSolids (TopOpeBRepBuild_SolidBuilder& B, TopTools_ListOfShape& L);
0201   
0202   Standard_EXPORT void MakeShells (TopOpeBRepBuild_SolidBuilder& B, TopTools_ListOfShape& L);
0203   
0204   //! Returns a ref.on the list of shapes connected to <S> as
0205   //! <TB> split parts of <S>.
0206   //! Mark <S> as split in <TB> parts.
0207   Standard_EXPORT TopTools_ListOfShape& ChangeSplit (const TopoDS_Shape& S, const TopAbs_State TB);
0208   
0209   Standard_EXPORT Standard_Boolean Opec12() const;
0210   
0211   Standard_EXPORT Standard_Boolean Opec21() const;
0212   
0213   Standard_EXPORT Standard_Boolean Opecom() const;
0214   
0215   Standard_EXPORT Standard_Boolean Opefus() const;
0216   
0217   Standard_EXPORT TopAbs_State ShapePosition (const TopoDS_Shape& S, const TopTools_ListOfShape& LS);
0218   
0219   Standard_EXPORT Standard_Boolean KeepShape (const TopoDS_Shape& S, const TopTools_ListOfShape& LS, const TopAbs_State T);
0220   
0221   Standard_EXPORT static TopAbs_ShapeEnum TopType (const TopoDS_Shape& S);
0222   
0223   Standard_EXPORT static Standard_Boolean Reverse (const TopAbs_State T1, const TopAbs_State T2);
0224   
0225   Standard_EXPORT static TopAbs_Orientation Orient (const TopAbs_Orientation O, const Standard_Boolean R);
0226   
0227   Standard_EXPORT void FindSameDomain (TopTools_ListOfShape& L1, TopTools_ListOfShape& L2) const;
0228   
0229   Standard_EXPORT void FindSameDomainSameOrientation (TopTools_ListOfShape& LSO, TopTools_ListOfShape& LDO) const;
0230   
0231   Standard_EXPORT void MapShapes (const TopoDS_Shape& S1, const TopoDS_Shape& S2);
0232   
0233   Standard_EXPORT void ClearMaps();
0234   
0235   Standard_EXPORT void FindSameRank (const TopTools_ListOfShape& L1, const Standard_Integer R, TopTools_ListOfShape& L2) const;
0236   
0237   Standard_EXPORT Standard_Integer ShapeRank (const TopoDS_Shape& S) const;
0238   
0239   Standard_EXPORT Standard_Boolean IsShapeOf (const TopoDS_Shape& S, const Standard_Integer I12) const;
0240   
0241   Standard_EXPORT static Standard_Boolean Contains (const TopoDS_Shape& S, const TopTools_ListOfShape& L);
0242   
0243   Standard_EXPORT Standard_Integer FindIsKPart();
0244   
0245   Standard_EXPORT Standard_Integer IsKPart() const;
0246   
0247   Standard_EXPORT virtual void MergeKPart();
0248   
0249   Standard_EXPORT virtual void MergeKPart (const TopAbs_State TB1, const TopAbs_State TB2);
0250   
0251   Standard_EXPORT void MergeKPartiskole();
0252   
0253   Standard_EXPORT void MergeKPartiskoletge();
0254   
0255   Standard_EXPORT void MergeKPartisdisj();
0256   
0257   Standard_EXPORT void MergeKPartisfafa();
0258   
0259   Standard_EXPORT void MergeKPartissoso();
0260   
0261   Standard_EXPORT Standard_Integer KPiskole();
0262   
0263   Standard_EXPORT Standard_Integer KPiskoletge();
0264   
0265   Standard_EXPORT Standard_Integer KPisdisj();
0266   
0267   Standard_EXPORT Standard_Integer KPisfafa();
0268   
0269   Standard_EXPORT Standard_Integer KPissoso();
0270   
0271   Standard_EXPORT void KPClearMaps();
0272   
0273   Standard_EXPORT Standard_Integer KPlhg (const TopoDS_Shape& S, const TopAbs_ShapeEnum T, TopTools_ListOfShape& L) const;
0274   
0275   Standard_EXPORT Standard_Integer KPlhg (const TopoDS_Shape& S, const TopAbs_ShapeEnum T) const;
0276   
0277   Standard_EXPORT Standard_Integer KPlhsd (const TopoDS_Shape& S, const TopAbs_ShapeEnum T, TopTools_ListOfShape& L) const;
0278   
0279   Standard_EXPORT Standard_Integer KPlhsd (const TopoDS_Shape& S, const TopAbs_ShapeEnum T) const;
0280   
0281   Standard_EXPORT TopAbs_State KPclasSS (const TopoDS_Shape& S1, const TopTools_ListOfShape& exceptLS1, const TopoDS_Shape& S2);
0282   
0283   Standard_EXPORT TopAbs_State KPclasSS (const TopoDS_Shape& S1, const TopoDS_Shape& exceptS1, const TopoDS_Shape& S2);
0284   
0285   Standard_EXPORT TopAbs_State KPclasSS (const TopoDS_Shape& S1, const TopoDS_Shape& S2);
0286   
0287   Standard_EXPORT Standard_Boolean KPiskolesh (const TopoDS_Shape& S, TopTools_ListOfShape& LS, TopTools_ListOfShape& LF) const;
0288   
0289   Standard_EXPORT Standard_Boolean KPiskoletgesh (const TopoDS_Shape& S, TopTools_ListOfShape& LS, TopTools_ListOfShape& LF) const;
0290   
0291   Standard_EXPORT void KPSameDomain (TopTools_ListOfShape& L1, TopTools_ListOfShape& L2) const;
0292   
0293   Standard_EXPORT Standard_Integer KPisdisjsh (const TopoDS_Shape& S) const;
0294   
0295   Standard_EXPORT Standard_Integer KPisfafash (const TopoDS_Shape& S) const;
0296   
0297   Standard_EXPORT Standard_Integer KPissososh (const TopoDS_Shape& S) const;
0298   
0299   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;
0300   
0301   Standard_EXPORT void KPiskoletgeanalyse (const TopOpeBRepDS_Config Conf, const TopAbs_State ST1, const TopAbs_State ST2, Standard_Integer& I) const;
0302   
0303   Standard_EXPORT void KPisdisjanalyse (const TopAbs_State ST1, const TopAbs_State ST2, Standard_Integer& I, Standard_Integer& IC1, Standard_Integer& IC2) const;
0304   
0305   Standard_EXPORT static Standard_Integer KPls (const TopoDS_Shape& S, const TopAbs_ShapeEnum T, TopTools_ListOfShape& L);
0306   
0307   Standard_EXPORT static Standard_Integer KPls (const TopoDS_Shape& S, const TopAbs_ShapeEnum T);
0308   
0309   Standard_EXPORT TopAbs_State KPclassF (const TopoDS_Shape& F1, const TopoDS_Shape& F2);
0310   
0311   Standard_EXPORT void KPclassFF (const TopoDS_Shape& F1, const TopoDS_Shape& F2, TopAbs_State& T1, TopAbs_State& T2);
0312   
0313   Standard_EXPORT Standard_Boolean KPiskoleFF (const TopoDS_Shape& F1, const TopoDS_Shape& F2, TopAbs_State& T1, TopAbs_State& T2);
0314   
0315   Standard_EXPORT static Standard_Boolean KPContains (const TopoDS_Shape& S, const TopTools_ListOfShape& L);
0316   
0317   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);
0318   
0319   Standard_EXPORT static Standard_Integer KPreturn (const Standard_Integer KP);
0320   
0321   Standard_EXPORT void SplitEvisoONperiodicF();
0322   
0323   Standard_EXPORT void GMergeSolids (const TopTools_ListOfShape& LSO1, const TopTools_ListOfShape& LSO2, const TopOpeBRepBuild_GTopo& G);
0324   
0325   Standard_EXPORT void GFillSolidsSFS (const TopTools_ListOfShape& LSO1, const TopTools_ListOfShape& LSO2, const TopOpeBRepBuild_GTopo& G, TopOpeBRepBuild_ShellFaceSet& SFS);
0326   
0327   Standard_EXPORT virtual void GFillSolidSFS (const TopoDS_Shape& SO1, const TopTools_ListOfShape& LSO2, const TopOpeBRepBuild_GTopo& G, TopOpeBRepBuild_ShellFaceSet& SFS);
0328   
0329   Standard_EXPORT void GFillSurfaceTopologySFS (const TopoDS_Shape& SO1, const TopOpeBRepBuild_GTopo& G, TopOpeBRepBuild_ShellFaceSet& SFS);
0330   
0331   Standard_EXPORT void GFillSurfaceTopologySFS (const TopOpeBRepDS_SurfaceIterator& IT, const TopOpeBRepBuild_GTopo& G, TopOpeBRepBuild_ShellFaceSet& SFS) const;
0332   
0333   Standard_EXPORT virtual void GFillShellSFS (const TopoDS_Shape& SH1, const TopTools_ListOfShape& LSO2, const TopOpeBRepBuild_GTopo& G, TopOpeBRepBuild_ShellFaceSet& SFS);
0334   
0335   Standard_EXPORT void GFillFaceSFS (const TopoDS_Shape& F1, const TopTools_ListOfShape& LSO2, const TopOpeBRepBuild_GTopo& G, TopOpeBRepBuild_ShellFaceSet& SFS);
0336   
0337   Standard_EXPORT void GSplitFaceSFS (const TopoDS_Shape& F1, const TopTools_ListOfShape& LSclass, const TopOpeBRepBuild_GTopo& G, TopOpeBRepBuild_ShellFaceSet& SFS);
0338   
0339   Standard_EXPORT void GMergeFaceSFS (const TopoDS_Shape& F, const TopOpeBRepBuild_GTopo& G, TopOpeBRepBuild_ShellFaceSet& SFS);
0340   
0341   Standard_EXPORT void GSplitFace (const TopoDS_Shape& F, const TopOpeBRepBuild_GTopo& G, const TopTools_ListOfShape& LSclass);
0342   
0343   Standard_EXPORT void AddONPatchesSFS (const TopOpeBRepBuild_GTopo& G, TopOpeBRepBuild_ShellFaceSet& SFS);
0344   
0345   Standard_EXPORT void FillOnPatches (const TopTools_ListOfShape& anEdgesON, const TopoDS_Shape& aBaseFace, const TopTools_IndexedMapOfOrientedShape& avoidMap);
0346   
0347   Standard_EXPORT void FindFacesTouchingEdge (const TopoDS_Shape& aFace, const TopoDS_Shape& anEdge, const Standard_Integer aShRank, TopTools_ListOfShape& aFaces) const;
0348   
0349   Standard_EXPORT void GMergeFaces (const TopTools_ListOfShape& LF1, const TopTools_ListOfShape& LF2, const TopOpeBRepBuild_GTopo& G);
0350   
0351   Standard_EXPORT void GFillFacesWES (const TopTools_ListOfShape& LF1, const TopTools_ListOfShape& LF2, const TopOpeBRepBuild_GTopo& G, TopOpeBRepBuild_WireEdgeSet& WES);
0352   
0353   Standard_EXPORT void GFillFacesWESK (const TopTools_ListOfShape& LF1, const TopTools_ListOfShape& LF2, const TopOpeBRepBuild_GTopo& G, TopOpeBRepBuild_WireEdgeSet& WES, const Standard_Integer K);
0354   
0355   Standard_EXPORT void GFillFacesWESMakeFaces (const TopTools_ListOfShape& LF1, const TopTools_ListOfShape& LF2, const TopTools_ListOfShape& LSO, const TopOpeBRepBuild_GTopo& G);
0356   
0357   Standard_EXPORT void GFillFaceWES (const TopoDS_Shape& F, const TopTools_ListOfShape& LF2, const TopOpeBRepBuild_GTopo& G, TopOpeBRepBuild_WireEdgeSet& WES);
0358   
0359   Standard_EXPORT void GFillCurveTopologyWES (const TopoDS_Shape& F, const TopOpeBRepBuild_GTopo& G, TopOpeBRepBuild_WireEdgeSet& WES);
0360   
0361   Standard_EXPORT void GFillCurveTopologyWES (const TopOpeBRepDS_CurveIterator& IT, const TopOpeBRepBuild_GTopo& G, TopOpeBRepBuild_WireEdgeSet& WES) const;
0362   
0363   Standard_EXPORT void GFillONPartsWES (const TopoDS_Shape& F, const TopOpeBRepBuild_GTopo& G, const TopTools_ListOfShape& LSclass, TopOpeBRepBuild_WireEdgeSet& WES);
0364   
0365   Standard_EXPORT void GFillWireWES (const TopoDS_Shape& W, const TopTools_ListOfShape& LF2, const TopOpeBRepBuild_GTopo& G, TopOpeBRepBuild_WireEdgeSet& WES);
0366   
0367   Standard_EXPORT void GFillEdgeWES (const TopoDS_Shape& E, const TopTools_ListOfShape& LF2, const TopOpeBRepBuild_GTopo& G, TopOpeBRepBuild_WireEdgeSet& WES);
0368   
0369   Standard_EXPORT void GSplitEdgeWES (const TopoDS_Shape& E, const TopTools_ListOfShape& LF2, const TopOpeBRepBuild_GTopo& G, TopOpeBRepBuild_WireEdgeSet& WES);
0370   
0371   Standard_EXPORT void GMergeEdgeWES (const TopoDS_Shape& E, const TopOpeBRepBuild_GTopo& G, TopOpeBRepBuild_WireEdgeSet& WES);
0372   
0373   Standard_EXPORT void GSplitEdge (const TopoDS_Shape& E, const TopOpeBRepBuild_GTopo& G, const TopTools_ListOfShape& LSclass);
0374   
0375   Standard_EXPORT void GMergeEdges (const TopTools_ListOfShape& LE1, const TopTools_ListOfShape& LE2, const TopOpeBRepBuild_GTopo& G);
0376   
0377   Standard_EXPORT void GFillEdgesPVS (const TopTools_ListOfShape& LE1, const TopTools_ListOfShape& LE2, const TopOpeBRepBuild_GTopo& G, TopOpeBRepBuild_PaveSet& PVS);
0378   
0379   Standard_EXPORT void GFillEdgePVS (const TopoDS_Shape& E, const TopTools_ListOfShape& LE2, const TopOpeBRepBuild_GTopo& G, TopOpeBRepBuild_PaveSet& PVS);
0380   
0381   Standard_EXPORT void GFillPointTopologyPVS (const TopoDS_Shape& E, const TopOpeBRepBuild_GTopo& G, TopOpeBRepBuild_PaveSet& PVS);
0382   
0383   Standard_EXPORT void GFillPointTopologyPVS (const TopoDS_Shape& E, const TopOpeBRepDS_PointIterator& IT, const TopOpeBRepBuild_GTopo& G, TopOpeBRepBuild_PaveSet& PVS) const;
0384   
0385   Standard_EXPORT Standard_Boolean GParamOnReference (const TopoDS_Vertex& V, const TopoDS_Edge& E, Standard_Real& P) const;
0386   
0387   Standard_EXPORT Standard_Boolean GKeepShape (const TopoDS_Shape& S, const TopTools_ListOfShape& Lref, const TopAbs_State T);
0388   
0389   //! return True if S is classified <T> / Lref shapes
0390   Standard_EXPORT Standard_Boolean GKeepShape1 (const TopoDS_Shape& S, const TopTools_ListOfShape& Lref, const TopAbs_State T, TopAbs_State& pos);
0391   
0392   //! add to Lou the shapes of Lin classified <T> / Lref shapes.
0393   //! Lou is not cleared. (S is a dummy trace argument)
0394   Standard_EXPORT void GKeepShapes (const TopoDS_Shape& S, const TopTools_ListOfShape& Lref, const TopAbs_State T, const TopTools_ListOfShape& Lin, TopTools_ListOfShape& Lou);
0395   
0396   Standard_EXPORT void GSFSMakeSolids (const TopoDS_Shape& SOF, TopOpeBRepBuild_ShellFaceSet& SFS, TopTools_ListOfShape& LOSO);
0397   
0398   Standard_EXPORT void GSOBUMakeSolids (const TopoDS_Shape& SOF, TopOpeBRepBuild_SolidBuilder& SOBU, TopTools_ListOfShape& LOSO);
0399   
0400   Standard_EXPORT virtual void GWESMakeFaces (const TopoDS_Shape& FF, TopOpeBRepBuild_WireEdgeSet& WES, TopTools_ListOfShape& LOF);
0401   
0402   Standard_EXPORT void GFABUMakeFaces (const TopoDS_Shape& FF, TopOpeBRepBuild_FaceBuilder& FABU, TopTools_ListOfShape& LOF, TopTools_DataMapOfShapeInteger& MWisOld);
0403   
0404   Standard_EXPORT void RegularizeFaces (const TopoDS_Shape& FF, const TopTools_ListOfShape& lnewFace, TopTools_ListOfShape& LOF);
0405   
0406   Standard_EXPORT void RegularizeFace (const TopoDS_Shape& FF, const TopoDS_Shape& newFace, TopTools_ListOfShape& LOF);
0407   
0408   Standard_EXPORT void RegularizeSolids (const TopoDS_Shape& SS, const TopTools_ListOfShape& lnewSolid, TopTools_ListOfShape& LOS);
0409   
0410   Standard_EXPORT void RegularizeSolid (const TopoDS_Shape& SS, const TopoDS_Shape& newSolid, TopTools_ListOfShape& LOS);
0411   
0412   Standard_EXPORT void GPVSMakeEdges (const TopoDS_Shape& EF, TopOpeBRepBuild_PaveSet& PVS, TopTools_ListOfShape& LOE) const;
0413   
0414   Standard_EXPORT void GEDBUMakeEdges (const TopoDS_Shape& EF, TopOpeBRepBuild_EdgeBuilder& EDBU, TopTools_ListOfShape& LOE) const;
0415   
0416   Standard_EXPORT Standard_Boolean GToSplit (const TopoDS_Shape& S, const TopAbs_State TB) const;
0417   
0418   Standard_EXPORT Standard_Boolean GToMerge (const TopoDS_Shape& S) const;
0419   
0420   Standard_EXPORT static Standard_Boolean GTakeCommonOfSame (const TopOpeBRepBuild_GTopo& G);
0421   
0422   Standard_EXPORT static Standard_Boolean GTakeCommonOfDiff (const TopOpeBRepBuild_GTopo& G);
0423   
0424   Standard_EXPORT void GFindSamDom (const TopoDS_Shape& S, TopTools_ListOfShape& L1, TopTools_ListOfShape& L2) const;
0425   
0426   Standard_EXPORT void GFindSamDom (TopTools_ListOfShape& L1, TopTools_ListOfShape& L2) const;
0427   
0428   Standard_EXPORT void GFindSamDomSODO (const TopoDS_Shape& S, TopTools_ListOfShape& LSO, TopTools_ListOfShape& LDO) const;
0429   
0430   Standard_EXPORT void GFindSamDomSODO (TopTools_ListOfShape& LSO, TopTools_ListOfShape& LDO) const;
0431   
0432   Standard_EXPORT void GMapShapes (const TopoDS_Shape& S1, const TopoDS_Shape& S2);
0433   
0434   Standard_EXPORT void GClearMaps();
0435   
0436   Standard_EXPORT void GFindSameRank (const TopTools_ListOfShape& L1, const Standard_Integer R, TopTools_ListOfShape& L2) const;
0437   
0438   Standard_EXPORT Standard_Integer GShapeRank (const TopoDS_Shape& S) const;
0439   
0440   Standard_EXPORT Standard_Boolean GIsShapeOf (const TopoDS_Shape& S, const Standard_Integer I12) const;
0441   
0442   Standard_EXPORT static Standard_Boolean GContains (const TopoDS_Shape& S, const TopTools_ListOfShape& L);
0443   
0444   Standard_EXPORT static void GCopyList (const TopTools_ListOfShape& Lin, const Standard_Integer i1, const Standard_Integer i2, TopTools_ListOfShape& Lou);
0445   
0446   Standard_EXPORT static void GCopyList (const TopTools_ListOfShape& Lin, TopTools_ListOfShape& Lou);
0447   
0448   Standard_EXPORT void GdumpLS (const TopTools_ListOfShape& L) const;
0449   
0450   Standard_EXPORT static void GdumpPNT (const gp_Pnt& P);
0451   
0452   Standard_EXPORT static void GdumpORIPARPNT (const TopAbs_Orientation o, const Standard_Real p, const gp_Pnt& Pnt);
0453   
0454   Standard_EXPORT void GdumpSHA (const TopoDS_Shape& S, const Standard_Address str = NULL) const;
0455   
0456   Standard_EXPORT void GdumpSHAORI (const TopoDS_Shape& S, const Standard_Address str = NULL) const;
0457   
0458   Standard_EXPORT void GdumpSHAORIGEO (const TopoDS_Shape& S, const Standard_Address str = NULL) const;
0459   
0460   Standard_EXPORT void GdumpSHASTA (const Standard_Integer iS, const TopAbs_State T, const TCollection_AsciiString& a = "", const TCollection_AsciiString& b = "") const;
0461   
0462   Standard_EXPORT void GdumpSHASTA (const TopoDS_Shape& S, const TopAbs_State T, const TCollection_AsciiString& a = "", const TCollection_AsciiString& b = "") const;
0463   
0464   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;
0465   
0466   Standard_EXPORT void GdumpEDG (const TopoDS_Shape& S, const Standard_Address str = NULL) const;
0467   
0468   Standard_EXPORT void GdumpEDGVER (const TopoDS_Shape& E, const TopoDS_Shape& V, const Standard_Address str = NULL) const;
0469   
0470   Standard_EXPORT void GdumpSAMDOM (const TopTools_ListOfShape& L, const Standard_Address str = NULL) const;
0471   
0472   Standard_EXPORT void GdumpEXP (const TopOpeBRepTool_ShapeExplorer& E) const;
0473   
0474   Standard_EXPORT void GdumpSOBU (TopOpeBRepBuild_SolidBuilder& SB) const;
0475   
0476   Standard_EXPORT void GdumpFABU (TopOpeBRepBuild_FaceBuilder& FB) const;
0477   
0478   Standard_EXPORT void GdumpEDBU (TopOpeBRepBuild_EdgeBuilder& EB) const;
0479   
0480   Standard_EXPORT Standard_Boolean GtraceSPS (const Standard_Integer iS) const;
0481   
0482   Standard_EXPORT Standard_Boolean GtraceSPS (const Standard_Integer iS, const Standard_Integer jS) const;
0483   
0484   Standard_EXPORT Standard_Boolean GtraceSPS (const TopoDS_Shape& S) const;
0485   
0486   Standard_EXPORT Standard_Boolean GtraceSPS (const TopoDS_Shape& S, Standard_Integer& IS) const;
0487   
0488   Standard_EXPORT void GdumpSHASETreset();
0489   
0490   Standard_EXPORT Standard_Integer GdumpSHASETindex();
0491   
0492   Standard_EXPORT static void PrintGeo (const TopoDS_Shape& S);
0493   
0494   Standard_EXPORT static void PrintSur (const TopoDS_Face& F);
0495   
0496   Standard_EXPORT static void PrintCur (const TopoDS_Edge& E);
0497   
0498   Standard_EXPORT static void PrintPnt (const TopoDS_Vertex& V);
0499   
0500   Standard_EXPORT static void PrintOri (const TopoDS_Shape& S);
0501   
0502   Standard_EXPORT static TCollection_AsciiString StringState (const TopAbs_State S);
0503   
0504   Standard_EXPORT static Standard_Boolean GcheckNBOUNDS (const TopoDS_Shape& E);
0505 
0506 
0507 friend class TopOpeBRepBuild_HBuilder;
0508 
0509 
0510 protected:
0511 
0512   
0513   //! update the DS by creating new geometries.
0514   //! create edges on the new curve <Icurv>.
0515   Standard_EXPORT void BuildEdges (const Standard_Integer iC, const Handle(TopOpeBRepDS_HDataStructure)& DS);
0516   
0517   //! update the DS by creating new geometries.
0518   //! create faces on the new surface <ISurf>.
0519   Standard_EXPORT void BuildFaces (const Standard_Integer iS, const Handle(TopOpeBRepDS_HDataStructure)& DS);
0520   
0521   //! update the DS by creating new geometries.
0522   //! create shapes from the new geometries.
0523   Standard_EXPORT void BuildFaces (const Handle(TopOpeBRepDS_HDataStructure)& DS);
0524   
0525   //! Split <E1> keeping the parts of state <TB1>.
0526   Standard_EXPORT void SplitEdge (const TopoDS_Shape& E1, const TopAbs_State TB1, const TopAbs_State TB2);
0527   
0528   //! Split <E1> keeping the parts of state <TB1>.
0529   Standard_EXPORT void SplitEdge1 (const TopoDS_Shape& E1, const TopAbs_State TB1, const TopAbs_State TB2);
0530   
0531   //! Split <E1> keeping the parts of state <TB1>.
0532   Standard_EXPORT void SplitEdge2 (const TopoDS_Shape& E1, const TopAbs_State TB1, const TopAbs_State TB2);
0533   
0534   //! Split <F1> keeping the  parts of state  <TB1>.
0535   //! Merge faces with same domain, keeping parts  of
0536   //! state <TB2>.
0537   Standard_EXPORT void SplitFace (const TopoDS_Shape& F1, const TopAbs_State TB1, const TopAbs_State TB2);
0538   
0539   Standard_EXPORT void SplitFace1 (const TopoDS_Shape& F1, const TopAbs_State TB1, const TopAbs_State TB2);
0540   
0541   Standard_EXPORT void SplitFace2 (const TopoDS_Shape& F1, const TopAbs_State TB1, const TopAbs_State TB2);
0542   
0543   //! Split <S1> keeping the parts of state <TB1>.
0544   Standard_EXPORT void SplitSolid (const TopoDS_Shape& S1, const TopAbs_State TB1, const TopAbs_State TB2);
0545   
0546   //! Explore shapes of given  by explorer <Ex> to split them.
0547   //! Store  new shapes in the set <SS>.
0548   //! According to RevOri, reverse or not their orientation.
0549   Standard_EXPORT void SplitShapes (TopOpeBRepTool_ShapeExplorer& Ex, const TopAbs_State TB1, const TopAbs_State TB2, TopOpeBRepBuild_ShapeSet& SS, const Standard_Boolean RevOri);
0550   
0551   //! Split edges of <F1> and store  wires and edges in
0552   //! the set <WES>. According to RevOri, reverse (or not) orientation.
0553   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);
0554   
0555   //! Split faces of <S1> and store shells  and faces in
0556   //! the set <SS>. According to RevOri, reverse (or not) orientation.
0557   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);
0558   
0559   //! Split subshapes of <S1> and store subshapes in
0560   //! the set <SS>. According to RevOri, reverse (or not) orientation.
0561   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);
0562   
0563   //! fills the vertex set PVS with the point iterator IT.
0564   //! IT accesses a list of interferences which geometry is a point or a vertex.
0565   //! TB indicates the orientation to give to the geometries
0566   //! found in interference list accessed by IT.
0567   Standard_EXPORT void FillVertexSet (TopOpeBRepDS_PointIterator& IT, const TopAbs_State TB, TopOpeBRepBuild_PaveSet& PVS) const;
0568   
0569   //! fills vertex set PVS with the current value of IT.
0570   //! I geometry is a point or a vertex.
0571   //! TB  indicates the orientation to give to geometries found I
0572   Standard_EXPORT void FillVertexSetOnValue (const TopOpeBRepDS_PointIterator& IT, const TopAbs_State TB, TopOpeBRepBuild_PaveSet& PVS) const;
0573   
0574   //! Returns True if the shape <S> has not already been split
0575   Standard_EXPORT Standard_Boolean ToSplit (const TopoDS_Shape& S, const TopAbs_State TB) const;
0576   
0577   //! add the shape <S> to the map of split shapes.
0578   //! mark <S> as split/not split on <state>, according to B value.
0579   Standard_EXPORT void MarkSplit (const TopoDS_Shape& S, const TopAbs_State TB, const Standard_Boolean B = Standard_True);
0580   
0581   //! Returns a ref. on the list of shapes connected to <S> as
0582   //! <TB> merged parts of <S>.
0583   Standard_EXPORT TopTools_ListOfShape& ChangeMerged (const TopoDS_Shape& S, const TopAbs_State TB);
0584   
0585   //! Returns a ref. on the vertex created on point <I>.
0586   Standard_EXPORT TopoDS_Shape& ChangeNewVertex (const Standard_Integer I);
0587   
0588   //! Returns a ref. on the list of edges created on curve <I>.
0589   Standard_EXPORT TopTools_ListOfShape& ChangeNewEdges (const Standard_Integer I);
0590   
0591   //! Returns a ref. on the list of faces created on surface <I>.
0592   Standard_EXPORT TopTools_ListOfShape& ChangeNewFaces (const Standard_Integer I);
0593   
0594   Standard_EXPORT void AddIntersectionEdges (TopoDS_Shape& F, const TopAbs_State TB, const Standard_Boolean RevOri, TopOpeBRepBuild_ShapeSet& ES) const;
0595   
0596   Standard_EXPORT void UpdateSplitAndMerged (const TopTools_DataMapOfIntegerListOfShape& mle, const TopTools_DataMapOfIntegerShape& mre, const TopTools_DataMapOfShapeShape& mlf, const TopAbs_State state);
0597 
0598 
0599   TopAbs_State myState1;
0600   TopAbs_State myState2;
0601   TopoDS_Shape myShape1;
0602   TopoDS_Shape myShape2;
0603   Handle(TopOpeBRepDS_HDataStructure) myDataStructure;
0604   TopOpeBRepDS_BuildTool myBuildTool;
0605   Handle(TopTools_HArray1OfShape) myNewVertices;
0606   TopTools_DataMapOfIntegerListOfShape myNewEdges;
0607   Handle(TopTools_HArray1OfListOfShape) myNewFaces;
0608   TopOpeBRepDS_DataMapOfShapeListOfShapeOn1State mySplitIN;
0609   TopOpeBRepDS_DataMapOfShapeListOfShapeOn1State mySplitON;
0610   TopOpeBRepDS_DataMapOfShapeListOfShapeOn1State mySplitOUT;
0611   TopOpeBRepDS_DataMapOfShapeListOfShapeOn1State myMergedIN;
0612   TopOpeBRepDS_DataMapOfShapeListOfShapeOn1State myMergedON;
0613   TopOpeBRepDS_DataMapOfShapeListOfShapeOn1State myMergedOUT;
0614   TopTools_ListOfShape myEmptyShapeList;
0615   TopTools_ListOfShape myListOfSolid;
0616   TopTools_ListOfShape myListOfFace;
0617   TopTools_ListOfShape myListOfEdge;
0618   TopTools_DataMapOfShapeListOfShape myFSplits;
0619   TopTools_DataMapOfShapeListOfShape myESplits;
0620   Standard_Boolean mySectionDone;
0621   Standard_Boolean mySplitSectionEdgesDone;
0622   TopTools_ListOfShape mySection;
0623   TopoDS_Solid mySolidReference;
0624   TopoDS_Solid mySolidToFill;
0625   TopTools_ListOfShape myFaceAvoid;
0626   TopoDS_Face myFaceReference;
0627   TopoDS_Face myFaceToFill;
0628   TopTools_ListOfShape myEdgeAvoid;
0629   TopoDS_Edge myEdgeReference;
0630   TopoDS_Edge myEdgeToFill;
0631   TopTools_ListOfShape myVertexAvoid;
0632   TopTools_IndexedMapOfShape myMAP1;
0633   TopTools_IndexedMapOfShape myMAP2;
0634   Standard_Integer myIsKPart;
0635   TopTools_DataMapOfShapeListOfShape myKPMAPf1f2;
0636   Standard_Integer mySHASETindex;
0637   Standard_Boolean myClassifyDef;
0638   Standard_Boolean myClassifyVal;
0639   TopOpeBRepTool_ShapeClassifier myShapeClassifier;
0640   TopTools_MapOfShape myMemoSplit;
0641   TCollection_AsciiString myEmptyAS;
0642   Standard_Boolean myProcessON;
0643   TopTools_IndexedDataMapOfShapeShape myONFacesMap;
0644   TopTools_IndexedMapOfOrientedShape myONElemMap;
0645 
0646 
0647 private:
0648 
0649 
0650 
0651 
0652 
0653 };
0654 
0655 
0656 
0657 
0658 
0659 
0660 
0661 #endif // _TopOpeBRepBuild_Builder_HeaderFile