1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-08-09 13:22:24 +03:00

0024157: Parallelization of Assembly part of BO

The Build (Assembly) Part of BO consists of several sub-parts:
1. Building Vertices
2. Building Edges
3. Building Faces
4. Building Solids
5. Building Container Shapes (Wires, Shells, Compsolids, Compounds)

Among the parts above
3.Building Faces
and
4.Building Solids
are the most time-consuming and thus should be parallelized first.

The parallelization process can be divided on three phases:
1. Parallelization Building Faces
2. Parallelization Building Solids
3. Parallelization the rest parts

The phase 1 : Parallelization Building Faces consists of three parts:
1.1. Building Split Faces
1.2. Building Same Domain Faces
1.3. Building Faces with Internal Shapes
The branch deals with the phase 1. chapter 1.1. Building Split Faces
This commit is contained in:
pkv
2013-09-13 07:05:16 +04:00
committed by bugmaster
parent b045e6a40b
commit acccace3fb
12 changed files with 348 additions and 72 deletions

View File

@@ -400,8 +400,8 @@ static
//function : BuildPCurveForEdgeOnPlane
//purpose :
//=======================================================================
void BOPTools_AlgoTools2D::BuildPCurveForEdgeOnPlane (const TopoDS_Edge& aE,
const TopoDS_Face& aF)
void BOPTools_AlgoTools2D::BuildPCurveForEdgeOnPlane (const TopoDS_Edge& aE,
const TopoDS_Face& aF)
{
Standard_Real aTolE;
TopLoc_Location aLoc;
@@ -428,14 +428,57 @@ static
//
return;
}
//=======================================================================
// function: BuildPCurveForEdgesOnPlane
// purpose:
//=======================================================================
void BOPTools_AlgoTools2D::BuildPCurveForEdgesOnPlane
(const BOPCol_ListOfShape& aEdges,
const TopoDS_Face& aFace)
{
TopLoc_Location aLoc;
Handle(Geom2d_Curve) aC2D;
Handle(Geom_Plane) aGP;
Handle(Geom_RectangularTrimmedSurface) aGRTS;
//
const Handle(Geom_Surface)& aS = BRep_Tool::Surface(aFace, aLoc);
aGRTS=Handle(Geom_RectangularTrimmedSurface)::DownCast(aS);
if(!aGRTS.IsNull()){
aGP=Handle(Geom_Plane)::DownCast(aGRTS->BasisSurface());
}
else {
aGP=Handle(Geom_Plane)::DownCast(aS);
}
//
if (aGP.IsNull()) {
return;
}
//
Standard_Boolean bHasOld;
Standard_Real aTolE, aT1, aT2;
BOPCol_ListIteratorOfListOfShape aIt;
BRep_Builder aBB;
//
aIt.Initialize(aEdges);
for(; aIt.More(); aIt.Next()) {
const TopoDS_Edge& aE=(*(TopoDS_Edge *)&aIt.Value());
bHasOld=BOPTools_AlgoTools2D::HasCurveOnSurface
(aE, aFace, aC2D, aT1, aT2, aTolE);
if (!bHasOld) {
BOPTools_AlgoTools2D::CurveOnSurface(aE, aFace, aC2D, aTolE);
aBB.UpdateEdge(aE, aC2D, aFace, aTolE);
}
}
}
//=======================================================================
//function : Make2D
//purpose :
//=======================================================================
void BOPTools_AlgoTools2D::Make2D (const TopoDS_Edge& aE,
const TopoDS_Face& aF,
Handle(Geom2d_Curve)& aC2D,
void BOPTools_AlgoTools2D::Make2D (const TopoDS_Edge& aE,
const TopoDS_Face& aF,
Handle(Geom2d_Curve)& aC2D,
Standard_Real& aFirst,
Standard_Real& aLast,
Standard_Real& aToler)