The contents dealing with the parallel computation of Vertex/Face interferences.
FillImagesFaces1 (me:out)
is protected;
-
- FillInternalVertices(me:out;
- theLF:out ListOfShape from BOPCol;
- theLIV:out ListOfInteger from BOPCol)
- is protected;
--
-- solids
--
// commercial license or contractual agreement.
#include <BOPAlgo_Builder.ixx>
-
+//
#include <NCollection_IncAllocator.hxx>
-
+//
#include <TopoDS_Shape.hxx>
#include <TopoDS_Face.hxx>
#include <TopoDS_Edge.hxx>
#include <TopoDS_Vertex.hxx>
#include <TopoDS_Compound.hxx>
-
+//
#include <BRep_Tool.hxx>
#include <BRep_Builder.hxx>
-
+//
#include <TopExp_Explorer.hxx>
-
+//
#include <BOPCol_ListOfShape.hxx>
#include <BOPCol_ListOfInteger.hxx>
#include <BOPCol_MapOfInteger.hxx>
#include <BOPCol_DataMapOfIntegerListOfShape.hxx>
#include <BOPCol_DataMapOfShapeShape.hxx>
-
+#include <BOPCol_NCVector.hxx>
+#include <BOPCol_TBB.hxx>
+//
#include <BOPInt_Context.hxx>
-
+//
#include <BOPDS_PaveBlock.hxx>
#include <BOPDS_ShapeInfo.hxx>
#include <BOPDS_DS.hxx>
#include <BOPDS_Interf.hxx>
#include <BOPDS_VectorOfCurve.hxx>
#include <BOPDS_VectorOfPoint.hxx>
-
+//
#include <BOPTools.hxx>
#include <BOPTools_AlgoTools.hxx>
#include <BOPTools_AlgoTools2D.hxx>
#include <BOPTools_ListOfCoupleOfShape.hxx>
#include <BOPTools_MapOfSet.hxx>
#include <BOPTools_DataMapOfShapeSet.hxx>
-#include <BOPAlgo_Builder_2Cnt.hxx>
+
static
Standard_Boolean HasPaveBlocksOnIn(const BOPDS_FaceInfo& aFI1,
void MakeBlocksCnx(const BOPCol_IndexedDataMapOfShapeListOfShape& aMILI,
BOPCol_DataMapOfIntegerListOfShape& aMBlocks,
Handle(NCollection_IncAllocator)& aAllocator);
-
-
+//
+typedef BOPCol_NCVector<TopoDS_Shape> BOPAlgo_VectorOfShape;
+//
+typedef BOPCol_NCVector<BOPAlgo_VectorOfShape> \
+ BOPAlgo_VectorOfVectorOfShape;
+//
+typedef NCollection_IndexedDataMap\
+ <BOPTools_Set, Standard_Integer, BOPTools_SetMapHasher> \
+ BOPAlgo_IndexedDataMapOfSetInteger;
+//
+//=======================================================================
+//class : BOPAlgo_PairOfShapeBoolean
+//purpose :
+//=======================================================================
+class BOPAlgo_PairOfShapeBoolean {
+ public:
+ BOPAlgo_PairOfShapeBoolean()
+ : myFlag(Standard_False) {
+ }
+ //
+ TopoDS_Shape& Shape1() {
+ return myShape1;
+ }
+ //
+ TopoDS_Shape& Shape2() {
+ return myShape2;
+ }
+ //
+ Standard_Boolean& Flag() {
+ return myFlag;
+ }
+ //
+ protected:
+ Standard_Boolean myFlag;
+ TopoDS_Shape myShape1;
+ TopoDS_Shape myShape2;
+};
+//
+typedef BOPCol_NCVector<BOPAlgo_PairOfShapeBoolean> \
+ BOPAlgo_VectorOfPairOfShapeBoolean;
+//
+//=======================================================================
+//function : BOPAlgo_BuilderSDFaceFunctor
+//purpose : The class provides the interface and implementation
+// of the parallel computations
+//=======================================================================
+class BOPAlgo_BuilderSDFaceFunctor {
+ protected:
+ BOPAlgo_VectorOfPairOfShapeBoolean* myPVPSB;
+
+ public:
+ //
+ BOPAlgo_BuilderSDFaceFunctor(BOPAlgo_VectorOfPairOfShapeBoolean& aVPSB)
+ : myPVPSB(&aVPSB){
+ }
+ //
+ void operator()( const flexible_range<Standard_Integer>& aBR ) const {
+ Standard_Boolean bFlag;
+ Standard_Integer i, iBeg, iEnd;
+ Handle(BOPInt_Context) aContext;
+ //
+ aContext=new BOPInt_Context;
+ //
+ BOPAlgo_VectorOfPairOfShapeBoolean& aVPSB=*myPVPSB;
+ //
+ iBeg=aBR.begin();
+ iEnd=aBR.end();
+ for(i=iBeg; i!=iEnd; ++i) {
+ BOPAlgo_PairOfShapeBoolean& aPSB=aVPSB(i);
+ const TopoDS_Face& aFj=(*(TopoDS_Face*)(&aPSB.Shape1()));
+ const TopoDS_Face& aFk=(*(TopoDS_Face*)(&aPSB.Shape2()));
+ bFlag=BOPTools_AlgoTools::AreFacesSameDomain(aFj, aFk, aContext);
+ if (bFlag) {
+ aPSB.Flag()=bFlag;
+ }
+ }
+ }
+};
+//
+//=======================================================================
+//function : BOPAlgo_BuilderSDFaceCnt
+//purpose : The class provides the interface and implementation
+// of the parallel computations
+//=======================================================================
+class BOPAlgo_BuilderSDFaceCnt {
+ public:
+ //-------------------------------
+ // Perform
+ Standard_EXPORT static
+ void Perform(const Standard_Boolean bRunParallel,
+ BOPAlgo_VectorOfPairOfShapeBoolean& aVPSB) {
+ Standard_Integer aNbVPSB;
+ //
+ aNbVPSB=aVPSB.Extent();
+ BOPAlgo_BuilderSDFaceFunctor aBFF(aVPSB);
+ //
+ if (bRunParallel) {
+ flexible_for(flexible_range<Standard_Integer>(0,aNbVPSB), aBFF);
+ }
+ else {
+ aBFF.operator()(flexible_range<Standard_Integer>(0,aNbVPSB));
+ }
+ }
+};
+//=======================================================================
+// BuilderFace
+//
+typedef BOPCol_NCVector<BOPAlgo_BuilderFace> BOPAlgo_VectorOfBuilderFace;
+//
+typedef BOPCol_TBBFunctor
+ <BOPAlgo_BuilderFace,
+ BOPAlgo_VectorOfBuilderFace> BOPAlgo_BuilderFaceFunctor;
+//
+typedef BOPCol_TBBCnt
+ <BOPAlgo_BuilderFaceFunctor,
+ BOPAlgo_VectorOfBuilderFace> BOPAlgo_BuilderFaceCnt;
+//
+//=======================================================================
+//class : BOPAlgo_VFI
+//purpose :
+//=======================================================================
+class BOPAlgo_VFI {
+ public:
+ BOPAlgo_VFI()
+ : myFlag(-1) {
+ }
+ //
+ ~BOPAlgo_VFI(){
+ }
+ //
+ void SetVertex(const TopoDS_Vertex& aV) {
+ myV=aV;
+ }
+ //
+ TopoDS_Vertex& Vertex() {
+ return myV;
+ }
+ //
+ void SetFace(const TopoDS_Face& aF) {
+ myF=aF;
+ }
+ //
+ TopoDS_Face& Face() {
+ return myF;
+ }
+ //
+ Standard_Integer Flag()const {
+ return myFlag;
+ }
+ //
+ void SetContext(const Handle(BOPInt_Context)& aContext) {
+ myContext=aContext;
+ }
+ //
+ const Handle(BOPInt_Context)& Context()const {
+ return myContext;
+ }
+ //
+ void Perform() {
+ Standard_Real aT1, aT2;
+ //
+ myFlag=myContext->ComputeVF(myV, myF, aT1, aT2);
+ }
+ //
+ protected:
+ Standard_Integer myFlag;
+ TopoDS_Vertex myV;
+ TopoDS_Face myF;
+ Handle(BOPInt_Context) myContext;
+};
+//
+typedef BOPCol_NCVector<BOPAlgo_VFI> BOPAlgo_VectorOfVFI;
+//
+typedef BOPCol_TBBContextFunctor
+ <BOPAlgo_VFI,
+ BOPAlgo_VectorOfVFI,
+ Handle_BOPInt_Context,
+ BOPInt_Context> BOPAlgo_VFIFunctor;
+//
+typedef BOPCol_TBBContextCnt
+ <BOPAlgo_VFIFunctor,
+ BOPAlgo_VectorOfVFI,
+ Handle_BOPInt_Context> BOPAlgo_VFICnt;
+//
//=======================================================================
//function : FillImagesFaces
//purpose :
//=======================================================================
void BOPAlgo_Builder::FillImagesFaces1()
{
- Standard_Integer i, aNbS, iSense;
+ Standard_Integer i, aNbS, iSense, nVx, aNbVFI, iFlag;
TopoDS_Face aFSD;
+ TopoDS_Vertex aVx;
+ BRep_Builder aBB;
BOPCol_ListOfInteger aLIAV;
BOPCol_ListOfShape aLFIm;
- BOPCol_ListIteratorOfListOfShape aItLS;
+ BOPCol_ListIteratorOfListOfInteger aItV;
+ BOPCol_ListIteratorOfListOfShape aItLS, aItF;
+ BOPAlgo_VectorOfVFI aVVFI;
//
aNbS=myDS->NbSourceShapes();
for (i=0; i<aNbS; ++i) {
if (!mySplits.IsBound(aF)) {
continue;
}
- //
+ //
+ // 1.
aLIAV.Clear();
myDS->AloneVertices(i, aLIAV);
aLFIm.Clear();
}
}
//
- FillInternalVertices(aLFIm, aLIAV);
+ //FillInternalVertices(aLFIm, aLIAV);
//
myImages.Bind(aF, aLFIm);
//
- //fill myOrigins
+ // 2. fill myOrigins
aItLS.Initialize(aLFIm);
for (; aItLS.More(); aItLS.Next()) {
const TopoDS_Face& aFSp=(*(TopoDS_Face*)(&aItLS.Value()));
myOrigins.Bind(aFSp, aF);
}
- }// for (i=0; i<aNbS; ++i) {
-}
-//=======================================================================
-// function: FillInternalVertices
-// purpose:
-//=======================================================================
-void BOPAlgo_Builder::FillInternalVertices(BOPCol_ListOfShape& aLFIm,
- BOPCol_ListOfInteger& aLIAV)
-{
- Standard_Integer nV, iFlag;
- Standard_Real aU1, aU2;
- TopoDS_Vertex aV;
- BRep_Builder aBB;
- BOPCol_ListIteratorOfListOfInteger aItV;
- BOPCol_ListIteratorOfListOfShape aItF;
- //
- aItV.Initialize(aLIAV);
- for (; aItV.More(); aItV.Next()) {
- nV=aItV.Value();
- aV=(*(TopoDS_Vertex*)(&myDS->Shape(nV)));
- aV.Orientation(TopAbs_INTERNAL);
//
- aItF.Initialize(aLFIm);
- for (; aItF.More(); aItF.Next()) {
- TopoDS_Face& aF=(*(TopoDS_Face*)(&aItF.Value()));
- iFlag=myContext->ComputeVF(aV, aF, aU1, aU2);
- if (!iFlag) {
- aBB.Add(aF, aV);
- break;
+ // 3.
+ aItV.Initialize(aLIAV);
+ for (; aItV.More(); aItV.Next()) {
+ nVx=aItV.Value();
+ aVx=(*(TopoDS_Vertex*)(&myDS->Shape(nVx)));
+ aVx.Orientation(TopAbs_INTERNAL);
+ //
+ aItF.Initialize(aLFIm);
+ for (; aItF.More(); aItF.Next()) {
+ TopoDS_Face& aFy=(*(TopoDS_Face*)(&aItF.Value()));
+ //
+ BOPAlgo_VFI& aVFI=aVVFI.Append1();
+ aVFI.SetVertex(aVx);
+ aVFI.SetFace(aFy);
}
}
+ }// for (i=0; i<aNbS; ++i) {
+ //
+ // 4.
+ aNbVFI=aVVFI.Extent();
+ //================================================================
+ BOPAlgo_VFICnt::Perform(myRunParallel, aVVFI, myContext);
+ //================================================================
+ //
+ for (i=0; i < aNbVFI; ++i) {
+ BOPAlgo_VFI& aVFI=aVVFI(i);
+ //
+ iFlag=aVFI.Flag();
+ if (!iFlag) {
+ TopoDS_Vertex& aVx=aVFI.Vertex();
+ TopoDS_Face& aFy=aVFI.Face();
+ aBB.Add(aFy, aVx);
+ }
}
}
//=======================================================================
aMEC.Clear();
aMVS.Clear();
}
-
//=======================================================================
//function : FillMap
//purpose :
}
return bRet;
}
+
/*
//DEBf
{
+++ /dev/null
-// Created by: Peter KURNEV
-// Copyright (c) 1999-2013 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 BOPAlgo_Builder_2Cnt_HeaderFile
-#define BOPAlgo_Builder_2Cnt_HeaderFile
-
-#include <NCollection_IndexedDataMap.hxx>
-
-#include <TopoDS_Shape.hxx>
-#include <TopoDS_Face.hxx>
-
-#include <BOPCol_TBB.hxx>
-#include <BOPCol_NCVector.hxx>
-
-#include <BOPTools_Set.hxx>
-#include <BOPTools_SetMapHasher.hxx>
-#include <BOPTools_AlgoTools.hxx>
-
-#include <BOPInt_Context.hxx>
-
-#include <BOPAlgo_BuilderFace.hxx>
-#include <BOPAlgo_BuilderSolid.hxx>
-
-typedef BOPCol_NCVector<BOPAlgo_BuilderFace> BOPAlgo_VectorOfBuilderFace;
-//
-//=======================================================================
-//class : BOPAlgo_BuilderFaceFunctor
-//purpose : The class provides the interface and implementation
-// of the parallel computations
-//=======================================================================
-class BOPAlgo_BuilderFaceFunctor {
- protected:
- BOPAlgo_VectorOfBuilderFace* myPVBF;
- //
- public:
- //
- BOPAlgo_BuilderFaceFunctor(BOPAlgo_VectorOfBuilderFace& aVBF)
- : myPVBF(&aVBF) {
- }
- //
- void operator()( const flexible_range<Standard_Integer>& aBR ) const{
- Standard_Integer i, iBeg, iEnd;
- //
- BOPAlgo_VectorOfBuilderFace& aVBF=*myPVBF;
- //
- iBeg=aBR.begin();
- iEnd=aBR.end();
- for(i=iBeg; i!=iEnd; ++i) {
- BOPAlgo_BuilderFace& aBF=aVBF(i);
- //
- aBF.Perform();
- }
- }
-};
-//=======================================================================
-//class : BOPAlgo_BuilderFaceCnt
-//purpose : The class provides the interface and implementation
-// of the parallel computations
-//=======================================================================
-class BOPAlgo_BuilderFaceCnt {
- public:
- //-------------------------------
- // Perform
- Standard_EXPORT static void Perform(const Standard_Boolean bRunParallel,
- BOPAlgo_VectorOfBuilderFace& aVBF) {
- //
- BOPAlgo_BuilderFaceFunctor aBFF(aVBF);
- Standard_Integer aNbBF=aVBF.Extent();
- //
- if (bRunParallel) {
- flexible_for(flexible_range<Standard_Integer>(0,aNbBF), aBFF);
- }
- else {
- aBFF.operator()(flexible_range<Standard_Integer>(0,aNbBF));
- }
- }
- //
-};
-//
-typedef BOPCol_NCVector<TopoDS_Shape> BOPAlgo_VectorOfShape;
-//
-typedef BOPCol_NCVector<BOPAlgo_VectorOfShape> \
- BOPAlgo_VectorOfVectorOfShape;
-//
-typedef NCollection_IndexedDataMap\
- <BOPTools_Set, Standard_Integer, BOPTools_SetMapHasher> \
- BOPAlgo_IndexedDataMapOfSetInteger;
-//
-//=======================================================================
-//class : BOPAlgo_PairOfShapeBoolean
-//purpose :
-//=======================================================================
-class BOPAlgo_PairOfShapeBoolean {
- public:
- BOPAlgo_PairOfShapeBoolean()
- : myFlag(Standard_False) {
- }
- //
- TopoDS_Shape& Shape1() {
- return myShape1;
- }
- //
- TopoDS_Shape& Shape2() {
- return myShape2;
- }
- //
- Standard_Boolean& Flag() {
- return myFlag;
- }
- //
- protected:
- Standard_Boolean myFlag;
- TopoDS_Shape myShape1;
- TopoDS_Shape myShape2;
-};
-//
-typedef BOPCol_NCVector<BOPAlgo_PairOfShapeBoolean> \
- BOPAlgo_VectorOfPairOfShapeBoolean;
-//
-//=======================================================================
-//function : BOPAlgo_BuilderSDFaceFunctor
-//purpose : The class provides the interface and implementation
-// of the parallel computations
-//=======================================================================
-class BOPAlgo_BuilderSDFaceFunctor {
- protected:
- BOPAlgo_VectorOfPairOfShapeBoolean* myPVPSB;
-
- public:
- //
- BOPAlgo_BuilderSDFaceFunctor(BOPAlgo_VectorOfPairOfShapeBoolean& aVPSB)
- : myPVPSB(&aVPSB){
- }
- //
- void operator()( const flexible_range<Standard_Integer>& aBR ) const {
- Standard_Boolean bFlag;
- Standard_Integer i, iBeg, iEnd;
- Handle(BOPInt_Context) aContext;
- //
- aContext=new BOPInt_Context;
- //
- BOPAlgo_VectorOfPairOfShapeBoolean& aVPSB=*myPVPSB;
- //
- iBeg=aBR.begin();
- iEnd=aBR.end();
- for(i=iBeg; i!=iEnd; ++i) {
- BOPAlgo_PairOfShapeBoolean& aPSB=aVPSB(i);
- const TopoDS_Face& aFj=(*(TopoDS_Face*)(&aPSB.Shape1()));
- const TopoDS_Face& aFk=(*(TopoDS_Face*)(&aPSB.Shape2()));
- bFlag=BOPTools_AlgoTools::AreFacesSameDomain(aFj, aFk, aContext);
- if (bFlag) {
- aPSB.Flag()=bFlag;
- }
- }
- }
-};
-//
-//=======================================================================
-//function : BOPAlgo_BuilderSDFaceCnt
-//purpose : The class provides the interface and implementation
-// of the parallel computations
-//=======================================================================
-class BOPAlgo_BuilderSDFaceCnt {
- public:
- //-------------------------------
- // Perform
- Standard_EXPORT static
- void Perform(const Standard_Boolean bRunParallel,
- BOPAlgo_VectorOfPairOfShapeBoolean& aVPSB) {
- Standard_Integer aNbVPSB;
- //
- aNbVPSB=aVPSB.Extent();
- BOPAlgo_BuilderSDFaceFunctor aBFF(aVPSB);
- //
- if (bRunParallel) {
- flexible_for(flexible_range<Standard_Integer>(0,aNbVPSB), aBFF);
- }
- else {
- aBFF.operator()(flexible_range<Standard_Integer>(0,aNbVPSB));
- }
- }
- //
-};
-//
-typedef BOPCol_NCVector<BOPAlgo_BuilderSolid> BOPAlgo_VectorOfBuilderSolid;
-//
-//=======================================================================
-//class : BOPAlgo_BuilderSolidFunctor
-//purpose : The class provides the interface and implementation
-// of the parallel computations
-//=======================================================================
-class BOPAlgo_BuilderSolidFunctor {
- protected:
- BOPAlgo_VectorOfBuilderSolid* myPVBS;
- //
- public:
- //
- BOPAlgo_BuilderSolidFunctor(BOPAlgo_VectorOfBuilderSolid& aVBS)
- : myPVBS(&aVBS) {
- }
- //
- void operator()( const flexible_range<Standard_Integer>& aBR ) const{
- Standard_Integer i, iBeg, iEnd;
- //
- BOPAlgo_VectorOfBuilderSolid& aVBS=*myPVBS;
- //
- iBeg=aBR.begin();
- iEnd=aBR.end();
- for(i=iBeg; i!=iEnd; ++i) {
- BOPAlgo_BuilderSolid& aBS=aVBS(i);
- //
- aBS.Perform();
- }
- }
-};
-//=======================================================================
-//class : BOPAlgo_BuilderSolidCnt
-//purpose : The class provides the interface and implementation
-// of the parallel computations
-//=======================================================================
-class BOPAlgo_BuilderSolidCnt {
- public:
- //-------------------------------
- // Perform
- Standard_EXPORT static void Perform(const Standard_Boolean bRunParallel,
- BOPAlgo_VectorOfBuilderSolid& aVBS) {
-
- Standard_Integer aNbBS=aVBS.Extent();
- BOPAlgo_BuilderSolidFunctor aBSF(aVBS);
- //
- if (bRunParallel) {
- flexible_for(flexible_range<Standard_Integer>(0,aNbBS), aBSF);
- }
- else {
- aBSF.operator()(flexible_range<Standard_Integer>(0,aNbBS));
- }
- }
- //
-};
-
-#endif
// commercial license or contractual agreement.
#include <BOPAlgo_Builder.hxx>
-
+//
#include <NCollection_IncAllocator.hxx>
#include <NCollection_UBTreeFiller.hxx>
-
+//
#include <Bnd_Box.hxx>
#include <TopAbs_State.hxx>
-
+//
#include <TopoDS.hxx>
#include <TopoDS_Iterator.hxx>
#include <TopoDS_Solid.hxx>
#include <TopoDS_Iterator.hxx>
#include <TopoDS_Shell.hxx>
#include <TopoDS_Compound.hxx>
-
+//
#include <TopExp.hxx>
#include <TopExp_Explorer.hxx>
-
+//
#include <BRep_Builder.hxx>
#include <BRepTools.hxx>
#include <BRepClass3d_SolidClassifier.hxx>
#include <BOPCol_BoxBndTree.hxx>
#include <BOPCol_ListOfInteger.hxx>
#include <BOPCol_DataMapOfIntegerShape.hxx>
+#include <BOPCol_NCVector.hxx>
+#include <BOPCol_TBB.hxx>
//
#include <BOPInt_Context.hxx>
//
#include <BOPTools_Set.hxx>
//
#include <BOPAlgo_BuilderSolid.hxx>
-#include <BOPAlgo_Builder_2Cnt.hxx>
static
BOPCol_ListOfShape& theLS);
//=======================================================================
+// BOPAlgo_BuilderSolid
+//
+typedef BOPCol_NCVector
+ <BOPAlgo_BuilderSolid> BOPAlgo_VectorOfBuilderSolid;
+//
+typedef BOPCol_TBBFunctor
+ <BOPAlgo_BuilderSolid,
+ BOPAlgo_VectorOfBuilderSolid> BOPAlgo_BuilderSolidFunctor;
+//
+typedef BOPCol_TBBCnt
+ <BOPAlgo_BuilderSolidFunctor,
+ BOPAlgo_VectorOfBuilderSolid> BOPAlgo_BuilderSolidCnt;
+//
+//=======================================================================
//class : BOPAlgo_ShapeBox
//purpose : Auxiliary class
//=======================================================================
//function : FillIn3DParts
//purpose :
//=======================================================================
-void BOPAlgo_Builder::FillIn3DParts(BOPCol_DataMapOfShapeListOfShape& theInParts,
- BOPCol_DataMapOfShapeShape& theDraftSolids,
- const BOPCol_BaseAllocator& )
+void BOPAlgo_Builder::FillIn3DParts
+ (BOPCol_DataMapOfShapeListOfShape& theInParts,
+ BOPCol_DataMapOfShapeShape& theDraftSolids,
+ const BOPCol_BaseAllocator& )
{
Standard_Boolean bHasImage;
Standard_Integer i, k, aNbS, aNbLIF, nFP, aNbFP, aNbFIN, iIsIN;
const BOPCol_ListOfShape& aLS=myImages.Find(aS);
aItLS.Initialize(aLS);
for (; aItLS.More(); aItLS.Next()) {
- const TopoDS_Shape& aSx=aItLS.Value();
- //
- Bnd_Box aBox;
- BRepBndLib::Add(aSx, aBox);
- //
- aSB.SetShape(aSx);
- aSB.SetBox(aBox);
- //
- aDMISB.Bind(k, aSB);
- ++k;
+ const TopoDS_Shape& aSx=aItLS.Value();
+ //
+ Bnd_Box aBox;
+ BRepBndLib::Add(aSx, aBox);
+ //
+ aSB.SetShape(aSx);
+ aSB.SetBox(aBox);
+ //
+ aDMISB.Bind(k, aSB);
+ ++k;
}
}
else {
const TopoDS_Shape& aShell=aIt.Value();
bHasImage=myImages.IsBound(aShell);
if (bHasImage){
- break;
+ break;
}
}
//
const BOPAlgo_ShapeBox& aSBF=aDMISB.Find(nFP);
const TopoDS_Face& aFP=(*(TopoDS_Face*)&aSBF.Shape());
if (aMF.Contains(aFP)) {
- continue;
+ continue;
}
if (aMFDone.Contains(aFP)) {
- continue;
+ continue;
}
//
aMFDone.Add(aFP);
//
aItLI1.Initialize(aLIFP);
for (; aItLI1.More(); aItLI1.Next()) {
- const TopoDS_Shape& aFx=aDMISB.Find(aItLI1.Value()).Shape();
- if (!aMFDone.Contains(aFx)) {
- aLFP.Append(aFx);
- }
+ const TopoDS_Shape& aFx=aDMISB.Find(aItLI1.Value()).Shape();
+ if (!aMFDone.Contains(aFx)) {
+ aLFP.Append(aFx);
+ }
}
//
aLCBF.Clear();
//----------------------------------------
{
- Handle(NCollection_IncAllocator) aAlr2;
- aAlr2=new NCollection_IncAllocator();
- //
- BOPTools_AlgoTools::MakeConnexityBlock(aLFP, aME, aLCBF, aAlr2);
+ Handle(NCollection_IncAllocator) aAlr2;
+ aAlr2=new NCollection_IncAllocator();
+ //
+ BOPTools_AlgoTools::MakeConnexityBlock(aLFP, aME, aLCBF, aAlr2);
}
//----------------------------------------
aItLS.Initialize(aLCBF);
if (aNbFIN || aNbLIF) {
aItLS.Initialize(aLIF);
for (; aItLS.More(); aItLS.Next()) {
- const TopoDS_Shape& aFI=aItLS.Value();
- aLFIN.Append(aFI);
+ const TopoDS_Shape& aFI=aItLS.Value();
+ aLFIN.Append(aFI);
}
theInParts.Bind(aSolid, aLFIN);
}
//---------------------------------------------
}// for (i=0; i<aNbS; ++i) {
}
-
//=======================================================================
//function : BuildDraftSolid
//purpose :
//=======================================================================
void BOPAlgo_Builder::BuildDraftSolid(const TopoDS_Shape& theSolid,
- TopoDS_Shape& theDraftSolid,
- BOPCol_ListOfShape& theLIF)
+ TopoDS_Shape& theDraftSolid,
+ BOPCol_ListOfShape& theLIF)
{
myErrorStatus=0;
//
TopoDS_Shell aShD;
TopoDS_Shape aFSDx, aFx;
BRep_Builder aBB;
- BOPCol_ListIteratorOfListOfShape aItS;
+ BOPCol_ListIteratorOfListOfShape aItS;
//
aOrSd=theSolid.Orientation();
theDraftSolid.Orientation(aOrSd);
theLIF.Append(aFSDx);
}
else {
- bToReverse=BOPTools_AlgoTools::IsSplitToReverse(aFSDx, aF, myContext);
+ bToReverse=BOPTools_AlgoTools::IsSplitToReverse(aFSDx,
+ aF,
+ myContext);
if (bToReverse) {
aFSDx.Reverse();
}
//function : BuildSplitSolids
//purpose :
//=======================================================================
-void BOPAlgo_Builder::BuildSplitSolids(BOPCol_DataMapOfShapeListOfShape& theInParts,
- BOPCol_DataMapOfShapeShape& theDraftSolids,
- const BOPCol_BaseAllocator& )
+void BOPAlgo_Builder::BuildSplitSolids
+ (BOPCol_DataMapOfShapeListOfShape& theInParts,
+ BOPCol_DataMapOfShapeShape& theDraftSolids,
+ const BOPCol_BaseAllocator& )
{
myErrorStatus=0;
//
for (; aIt.More(); aIt.Next()) {
const TopoDS_Shape& aS=aIt.Value();
aType=aS.ShapeType();
- if (aType==TopAbs_VERTEX || aType==TopAbs_EDGE ||aType==TopAbs_WIRE) {
+ if (aType==TopAbs_VERTEX ||
+ aType==TopAbs_EDGE ||
+ aType==TopAbs_WIRE) {
if (aMFence.Add(aS)) {
if (myImages.IsBound(aS)) {
const BOPCol_ListOfShape &aLSp=myImages.Find(aS);
//function : OwnInternalShapes
//purpose :
//=======================================================================
- void OwnInternalShapes(const TopoDS_Shape& theS,
- BOPCol_IndexedMapOfShape& theMx)
+void OwnInternalShapes(const TopoDS_Shape& theS,
+ BOPCol_IndexedMapOfShape& theMx)
{
TopoDS_Iterator aIt;
//
// commercial license or contractual agreement.
#include <BOPAlgo_PaveFiller.ixx>
-
+//
#include <NCollection_IncAllocator.hxx>
-
+//
#include <TopoDS_Vertex.hxx>
#include <TopoDS_Face.hxx>
#include <BRep_Tool.hxx>
#include <BRep_Builder.hxx>
#include <BRepBndLib.hxx>
-
+//
#include <BOPCol_MapOfInteger.hxx>
-
+#include <BOPCol_NCVector.hxx>
+#include <BOPCol_TBB.hxx>
+//
#include <BOPInt_Context.hxx>
-
+//
#include <BOPDS_Iterator.hxx>
#include <BOPDS_VectorOfInterfVF.hxx>
#include <BOPDS_Interf.hxx>
#include <BOPDS_SubIterator.hxx>
#include <BOPDS_MapOfPaveBlock.hxx>
#include <BOPDS_FaceInfo.hxx>
-#include <BOPCol_MapOfInteger.hxx>
//=======================================================================
+//class : BOPAlgo_VertexFace
+//purpose :
+//=======================================================================
+class BOPAlgo_VertexFace {
+ public:
+ BOPAlgo_VertexFace()
+ : myIV(-1), myIF(-1), myIVx(-1),
+ myFlag(-1), myT1(-1.), myT2(-1.) {
+ }
+ //
+ ~BOPAlgo_VertexFace(){
+ }
+ //
+ void SetIndices(const Standard_Integer nV,
+ const Standard_Integer nF,
+ const Standard_Integer nVx) {
+ myIV=nV;
+ myIF=nF;
+ myIVx=nVx;
+ }
+ //
+ void Indices(Standard_Integer& nV,
+ Standard_Integer& nF,
+ Standard_Integer& nVx) const {
+ nV=myIV;
+ nF=myIF;
+ nVx=myIVx;
+ }
+ //
+ void SetVertex(const TopoDS_Vertex& aV) {
+ myV=aV;
+ }
+ //
+ const TopoDS_Vertex& Vertex()const {
+ return myV;
+ }
+ //
+ void SetFace(const TopoDS_Face& aF) {
+ myF=aF;
+ }
+ //
+ const TopoDS_Face& Face()const {
+ return myF;
+ }
+ //
+ Standard_Integer Flag()const {
+ return myFlag;
+ }
+ //
+ void Parameters(Standard_Real& aT1,
+ Standard_Real& aT2)const {
+ aT1=myT1;
+ aT2=myT2;
+ }
+ //
+ void SetContext(const Handle(BOPInt_Context)& aContext) {
+ myContext=aContext;
+ }
+ //
+ const Handle(BOPInt_Context)& Context()const {
+ return myContext;
+ }
+ //
+ void Perform() {
+ myFlag=myContext->ComputeVF(myV, myF, myT1, myT2);
+ }
+ //
+ protected:
+ Standard_Integer myIV;
+ Standard_Integer myIF;
+ Standard_Integer myIVx;
+ Standard_Integer myFlag;
+ Standard_Real myT1;
+ Standard_Real myT2;
+ TopoDS_Vertex myV;
+ TopoDS_Face myF;
+ Handle(BOPInt_Context) myContext;
+};
+//=======================================================================
+typedef BOPCol_NCVector<BOPAlgo_VertexFace>
+ BOPAlgo_VectorOfVertexFace;
+//
+typedef BOPCol_TBBContextFunctor
+ <BOPAlgo_VertexFace,
+ BOPAlgo_VectorOfVertexFace,
+ Handle_BOPInt_Context,
+ BOPInt_Context> BOPAlgo_VertexFaceFunctor;
+//
+typedef BOPCol_TBBContextCnt
+ <BOPAlgo_VertexFaceFunctor,
+ BOPAlgo_VectorOfVertexFace,
+ Handle_BOPInt_Context> BOPAlgo_VertexFaceCnt;
+//
+//=======================================================================
// function: PerformVF
// purpose:
//=======================================================================
- void BOPAlgo_PaveFiller::PerformVF()
+void BOPAlgo_PaveFiller::PerformVF()
{
Standard_Boolean bJustAdd;
- Standard_Integer iSize, nV, nF, nVSD, iFlag, nVx, i;
+ Standard_Integer iSize, nV, nF, nVSD, iFlag, nVx, i, aNbVF, k;
Standard_Real aT1, aT2, aTolF, aTolV;
BRep_Builder aBB;
+ BOPAlgo_VectorOfVertexFace aVVF;
//
myErrorStatus=0;
//
continue;
}
//
+ myDS->ChangeFaceInfo(nF);// !
+ //
const TopoDS_Vertex& aV=(*(TopoDS_Vertex *)(&myDS->Shape(nVx)));
const TopoDS_Face& aF=(*(TopoDS_Face *)(&myDS->Shape(nF)));
//
+ BOPAlgo_VertexFace& aVertexFace=aVVF.Append1();
+ //
+ aVertexFace.SetIndices(nV, nF, nVx);
+ aVertexFace.SetVertex(aV);
+ aVertexFace.SetFace(aF);
+ }//for (; myIterator->More(); myIterator->Next()) {
+ //
+ aNbVF=aVVF.Extent();
+ //================================================================
+ BOPAlgo_VertexFaceCnt::Perform(myRunParallel, aVVF, myContext);
+ //================================================================
+ //
+ for (k=0; k < aNbVF; ++k) {
+ const BOPAlgo_VertexFace& aVertexFace=aVVF(k);
+ //
+ iFlag=aVertexFace.Flag();
+ if (iFlag) {
+ continue;
+ }
+ //
+ aVertexFace.Indices(nV, nF, nVx);
+ aVertexFace.Parameters(aT1, aT2);
+ const TopoDS_Vertex& aV=aVertexFace.Vertex();
+ const TopoDS_Face& aF=aVertexFace.Face();
+ // 1
+ i=aVFs.Append()-1;
+ BOPDS_InterfVF& aVF=aVFs(i);
+ aVF.SetIndices(nVx, nF);
+ aVF.SetUV(aT1, aT2);
+ // 2
+ myDS->AddInterf(nVx, nF);
+ // 3
+ BOPDS_FaceInfo& aFI=myDS->ChangeFaceInfo(nF);
+ BOPCol_MapOfInteger& aMVIn=aFI.ChangeVerticesIn();
+ aMVIn.Add(nVx);
+ // 4
aTolV = BRep_Tool::Tolerance(aV);
aTolF = BRep_Tool::Tolerance(aF);
- //
- iFlag=myContext->ComputeVF(aV, aF, aT1, aT2);
- if (!iFlag) {
- // 1
- i=aVFs.Append()-1;
- BOPDS_InterfVF& aVF=aVFs(i);
- aVF.SetIndices(nVx, nF);
- aVF.SetUV(aT1, aT2);
- // 2
- myDS->AddInterf(nVx, nF);
- //
- BOPDS_FaceInfo& aFI=myDS->ChangeFaceInfo(nF);
- BOPCol_MapOfInteger& aMVIn=aFI.ChangeVerticesIn();
- aMVIn.Add(nVx);
- //
- if (aTolV < aTolF) {
- aBB.UpdateVertex(aV, aTolF);
- BOPDS_ShapeInfo& aSIV = myDS->ChangeShapeInfo(nVx);
- Bnd_Box& aBoxV = aSIV.ChangeBox();
- BRepBndLib::Add(aV, aBoxV);
- }
+ if (aTolV < aTolF) {
+ aBB.UpdateVertex(aV, aTolF);
+ BOPDS_ShapeInfo& aSIV = myDS->ChangeShapeInfo(nVx);
+ Bnd_Box& aBoxV = aSIV.ChangeBox();
+ BRepBndLib::Add(aV, aBoxV);
}
- }// for (; myIterator->More(); myIterator->Next()) {
+ }//for (k=0; k < aNbVF; ++k) {
}// if (iSize) {
else {
iSize=10;
}
//
TreatVerticesEE();
-}
-
-
+}
//=======================================================================
//function : TreatVerticesEE
//purpose :
//=======================================================================
- void BOPAlgo_PaveFiller::TreatVerticesEE()
+void BOPAlgo_PaveFiller::TreatVerticesEE()
{
Standard_Integer i, aNbS, aNbEEs, nF, nV, iFlag;
Standard_Real aT1, aT2;
BOPCol_ListIteratorOfListOfInteger aItLI;
Handle(NCollection_IncAllocator) aAllocator;
//
- //-----------------------------------------------------scope_1 f
aAllocator=new NCollection_IncAllocator();
BOPCol_ListOfInteger aLIV(aAllocator), aLIF(aAllocator);
BOPCol_MapOfInteger aMI(100, aAllocator);
}
//
aAllocator.Nullify();
- //-----------------------------------------------------scope_1 t
}
BOPAlgo_BOP_1.cxx
BOPAlgo_WireSplitter_1.cxx
BOPAlgo_ListOfCheckResult.hxx
-BOPAlgo_Builder_2Cnt.hxx
BOPAlgo_CheckerSI_1.cxx
-
BOPAlgo_PaveFiller_9.cxx