1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-04-10 18:51:21 +03:00

0026701: BOPAlgo_Builder::Perform crash.

Data race eliminated (PCurves are stored in edges after paralleled calculation)

Add comments and make minor cosmetic changes.
This commit is contained in:
isn 2015-09-22 22:10:56 +03:00 committed by abv
parent b9f21bee94
commit 575e33ceba
3 changed files with 49 additions and 1 deletions

View File

@ -304,13 +304,28 @@ class BOPAlgo_BPC {
myE=aE;
}
//
const TopoDS_Edge& GetEdge() const {
return myE;
}
const TopoDS_Face& GetFace() const {
return myF;
}
const Handle_Geom2d_Curve& GetCurve2d() const {
return myCurve;
}
Standard_Boolean IsToUpdate() const {
return myToUpdate;
}
//
void Perform() {
BOPTools_AlgoTools2D::BuildPCurveForEdgeOnPlane (myE, myF);
BOPTools_AlgoTools2D::BuildPCurveForEdgeOnPlane (myE, myF, myCurve, myToUpdate);
};
//
protected:
TopoDS_Edge myE;
TopoDS_Face myF;
Handle_Geom2d_Curve myCurve;
Standard_Boolean myToUpdate;
};
//=======================================================================
typedef BOPCol_NCVector
@ -748,6 +763,7 @@ void BOPAlgo_PaveFiller::Prepare()
return;
}
//
// Build pcurves of edges on planes; first collect pairs edge-face.
BOPAlgo_VectorOfBPC aVBPC;
//
for (i = 1; i <= aNbF; ++i) {
@ -764,6 +780,17 @@ void BOPAlgo_PaveFiller::Prepare()
//======================================================
BOPAlgo_BPCCnt::Perform(myRunParallel, aVBPC);
//======================================================
// pcurves are built, and now update edges
BRep_Builder aBB;
TopoDS_Edge E;
for (i = 0; i < aVBPC.Extent(); i++) {
const BOPAlgo_BPC& aBPC=aVBPC(i);
if (aBPC.IsToUpdate()) {
Standard_Real aTolE = BRep_Tool::Tolerance(aBPC.GetEdge());
aBB.UpdateEdge(aBPC.GetEdge(), aBPC.GetCurve2d(), aBPC.GetFace(), aTolE);
}
}
}
//=======================================================================
//function : IsBasedOnPlane

View File

@ -158,6 +158,12 @@ is
theE : Edge from TopoDS;
theF : Face from TopoDS);
BuildPCurveForEdgeOnPlane(myclass;
theE : Edge from TopoDS;
theF : Face from TopoDS;
theC2D: out Curve from Geom2d;
bToUpdate: out Boolean);
BuildPCurveForEdgesOnPlane(myclass;
theLE : ListOfShape from BOPCol;
theF : Face from TopoDS);

View File

@ -505,6 +505,21 @@ void BOPTools_AlgoTools2D::BuildPCurveForEdgeOnPlane
aBB.UpdateEdge(aE, aC2D, aF, aTolE);
}
}
//=======================================================================
//function : BuildPCurveForEdgeOnPlane
//purpose :
//=======================================================================
void BOPTools_AlgoTools2D::BuildPCurveForEdgeOnPlane
(const TopoDS_Edge& aE,
const TopoDS_Face& aF,
Handle(Geom2d_Curve)& aC2D,
Standard_Boolean& bToUpdate)
{
Standard_Real aT1, aT2;
aC2D=BRep_Tool_CurveOnSurface(aE, aF, aT1, aT2, bToUpdate);
}
//=======================================================================
// function: BuildPCurveForEdgesOnPlane
// purpose: