mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-04-03 17:56:21 +03:00
0024639: Parallelization FillDS part of BO
The contents dealing with the parallel computation of Vertex/Face interferences.
This commit is contained in:
parent
c0ade4c610
commit
a0a3f6aca4
@ -166,11 +166,6 @@ is
|
||||
|
||||
FillImagesFaces1 (me:out)
|
||||
is protected;
|
||||
|
||||
FillInternalVertices(me:out;
|
||||
theLF:out ListOfShape from BOPCol;
|
||||
theLIV:out ListOfInteger from BOPCol)
|
||||
is protected;
|
||||
--
|
||||
-- solids
|
||||
--
|
||||
|
@ -16,28 +16,30 @@
|
||||
// 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>
|
||||
@ -47,7 +49,7 @@
|
||||
#include <BOPDS_Interf.hxx>
|
||||
#include <BOPDS_VectorOfCurve.hxx>
|
||||
#include <BOPDS_VectorOfPoint.hxx>
|
||||
|
||||
//
|
||||
#include <BOPTools.hxx>
|
||||
#include <BOPTools_AlgoTools.hxx>
|
||||
#include <BOPTools_AlgoTools2D.hxx>
|
||||
@ -57,7 +59,7 @@
|
||||
#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,
|
||||
@ -71,8 +73,190 @@ static
|
||||
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 :
|
||||
@ -493,11 +677,15 @@ void BOPAlgo_Builder::FillSameDomainFaces()
|
||||
//=======================================================================
|
||||
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) {
|
||||
@ -511,7 +699,8 @@ void BOPAlgo_Builder::FillImagesFaces1()
|
||||
if (!mySplits.IsBound(aF)) {
|
||||
continue;
|
||||
}
|
||||
//
|
||||
//
|
||||
// 1.
|
||||
aLIAV.Clear();
|
||||
myDS->AloneVertices(i, aLIAV);
|
||||
aLFIm.Clear();
|
||||
@ -533,47 +722,50 @@ void BOPAlgo_Builder::FillImagesFaces1()
|
||||
}
|
||||
}
|
||||
//
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
//=======================================================================
|
||||
@ -657,7 +849,6 @@ void MakeBlocksCnx(const BOPCol_IndexedDataMapOfShapeListOfShape& aMILI,
|
||||
aMEC.Clear();
|
||||
aMVS.Clear();
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : FillMap
|
||||
//purpose :
|
||||
@ -722,6 +913,7 @@ Standard_Boolean HasPaveBlocksOnIn(const BOPDS_FaceInfo& aFI1,
|
||||
}
|
||||
return bRet;
|
||||
}
|
||||
|
||||
/*
|
||||
//DEBf
|
||||
{
|
||||
|
@ -1,252 +0,0 @@
|
||||
// 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
|
@ -16,13 +16,13 @@
|
||||
// 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>
|
||||
@ -33,10 +33,10 @@
|
||||
#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>
|
||||
@ -49,6 +49,8 @@
|
||||
#include <BOPCol_BoxBndTree.hxx>
|
||||
#include <BOPCol_ListOfInteger.hxx>
|
||||
#include <BOPCol_DataMapOfIntegerShape.hxx>
|
||||
#include <BOPCol_NCVector.hxx>
|
||||
#include <BOPCol_TBB.hxx>
|
||||
//
|
||||
#include <BOPInt_Context.hxx>
|
||||
//
|
||||
@ -61,7 +63,6 @@
|
||||
#include <BOPTools_Set.hxx>
|
||||
//
|
||||
#include <BOPAlgo_BuilderSolid.hxx>
|
||||
#include <BOPAlgo_Builder_2Cnt.hxx>
|
||||
|
||||
|
||||
static
|
||||
@ -73,6 +74,20 @@ static
|
||||
BOPCol_MapOfShape& aMFence,
|
||||
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
|
||||
@ -156,9 +171,10 @@ void BOPAlgo_Builder::FillImagesSolids()
|
||||
//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;
|
||||
@ -192,16 +208,16 @@ void BOPAlgo_Builder::FillIn3DParts(BOPCol_DataMapOfShapeListOfShape& theInParts
|
||||
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 {
|
||||
@ -261,7 +277,7 @@ void BOPAlgo_Builder::FillIn3DParts(BOPCol_DataMapOfShapeListOfShape& theInParts
|
||||
const TopoDS_Shape& aShell=aIt.Value();
|
||||
bHasImage=myImages.IsBound(aShell);
|
||||
if (bHasImage){
|
||||
break;
|
||||
break;
|
||||
}
|
||||
}
|
||||
//
|
||||
@ -308,10 +324,10 @@ void BOPAlgo_Builder::FillIn3DParts(BOPCol_DataMapOfShapeListOfShape& theInParts
|
||||
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);
|
||||
@ -323,19 +339,19 @@ void BOPAlgo_Builder::FillIn3DParts(BOPCol_DataMapOfShapeListOfShape& theInParts
|
||||
//
|
||||
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);
|
||||
@ -353,8 +369,8 @@ void BOPAlgo_Builder::FillIn3DParts(BOPCol_DataMapOfShapeListOfShape& theInParts
|
||||
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);
|
||||
}
|
||||
@ -365,14 +381,13 @@ void BOPAlgo_Builder::FillIn3DParts(BOPCol_DataMapOfShapeListOfShape& theInParts
|
||||
//---------------------------------------------
|
||||
}// 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;
|
||||
//
|
||||
@ -383,7 +398,7 @@ void BOPAlgo_Builder::BuildDraftSolid(const TopoDS_Shape& theSolid,
|
||||
TopoDS_Shell aShD;
|
||||
TopoDS_Shape aFSDx, aFx;
|
||||
BRep_Builder aBB;
|
||||
BOPCol_ListIteratorOfListOfShape aItS;
|
||||
BOPCol_ListIteratorOfListOfShape aItS;
|
||||
//
|
||||
aOrSd=theSolid.Orientation();
|
||||
theDraftSolid.Orientation(aOrSd);
|
||||
@ -419,7 +434,9 @@ void BOPAlgo_Builder::BuildDraftSolid(const TopoDS_Shape& theSolid,
|
||||
theLIF.Append(aFSDx);
|
||||
}
|
||||
else {
|
||||
bToReverse=BOPTools_AlgoTools::IsSplitToReverse(aFSDx, aF, myContext);
|
||||
bToReverse=BOPTools_AlgoTools::IsSplitToReverse(aFSDx,
|
||||
aF,
|
||||
myContext);
|
||||
if (bToReverse) {
|
||||
aFSDx.Reverse();
|
||||
}
|
||||
@ -461,9 +478,10 @@ void BOPAlgo_Builder::BuildDraftSolid(const TopoDS_Shape& theSolid,
|
||||
//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;
|
||||
//
|
||||
@ -650,7 +668,9 @@ void BOPAlgo_Builder::FillInternalShapes()
|
||||
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);
|
||||
@ -809,8 +829,8 @@ void BOPAlgo_Builder::FillInternalShapes()
|
||||
//function : OwnInternalShapes
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void OwnInternalShapes(const TopoDS_Shape& theS,
|
||||
BOPCol_IndexedMapOfShape& theMx)
|
||||
void OwnInternalShapes(const TopoDS_Shape& theS,
|
||||
BOPCol_IndexedMapOfShape& theMx)
|
||||
{
|
||||
TopoDS_Iterator aIt;
|
||||
//
|
||||
|
@ -16,37 +16,133 @@
|
||||
// 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;
|
||||
//
|
||||
@ -83,34 +179,56 @@
|
||||
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;
|
||||
@ -121,21 +239,18 @@
|
||||
}
|
||||
//
|
||||
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);
|
||||
@ -209,5 +324,4 @@
|
||||
}
|
||||
//
|
||||
aAllocator.Nullify();
|
||||
//-----------------------------------------------------scope_1 t
|
||||
}
|
||||
|
@ -13,7 +13,5 @@ BOPAlgo_Builder_4.cxx
|
||||
BOPAlgo_BOP_1.cxx
|
||||
BOPAlgo_WireSplitter_1.cxx
|
||||
BOPAlgo_ListOfCheckResult.hxx
|
||||
BOPAlgo_Builder_2Cnt.hxx
|
||||
BOPAlgo_CheckerSI_1.cxx
|
||||
|
||||
BOPAlgo_PaveFiller_9.cxx
|
||||
|
Loading…
x
Reference in New Issue
Block a user