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

0026365: Optimization of work of OSD_Parallel class members for GeomLib_CheckCurveOnSurface

Removed workaround within GeomLib_CheckCurveOnSurface.
This commit is contained in:
kgv
2019-01-10 16:35:25 +03:00
committed by bugmaster
parent 793d165af6
commit 3738565abb
8 changed files with 20 additions and 25 deletions

View File

@@ -356,8 +356,9 @@ static Standard_Boolean isTreatAnalityc(const BRepAdaptor_Surface& theBAS1,
//function : Perform
//purpose : intersect surfaces of the faces
//=======================================================================
void IntTools_FaceFace::Perform(const TopoDS_Face& aF1,
const TopoDS_Face& aF2)
void IntTools_FaceFace::Perform (const TopoDS_Face& aF1,
const TopoDS_Face& aF2,
const Standard_Boolean theToRunParallel)
{
if (myContext.IsNull()) {
myContext=new IntTools_Context;
@@ -560,7 +561,7 @@ void IntTools_FaceFace::Perform(const TopoDS_Face& aF1,
MakeCurve(i, dom1, dom2, TolArc);
}
//
ComputeTolReached3d();
ComputeTolReached3d (theToRunParallel);
//
if (bReverse) {
Handle(Geom2d_Curve) aC2D1, aC2D2;
@@ -624,7 +625,7 @@ void IntTools_FaceFace::Perform(const TopoDS_Face& aF1,
//function :ComputeTolReached3d
//purpose :
//=======================================================================
void IntTools_FaceFace::ComputeTolReached3d()
void IntTools_FaceFace::ComputeTolReached3d (const Standard_Boolean theToRunParallel)
{
Standard_Integer i, j, aNbLin = mySeqOfCurve.Length();
if (!aNbLin) {
@@ -662,8 +663,7 @@ void IntTools_FaceFace::ComputeTolReached3d()
// Look for the maximal deviation between 3D and 2D curves
Standard_Real aD, aT;
const Handle(Geom_Surface)& aS = !j ? aS1 : aS2;
if (IntTools_Tools::ComputeTolerance
(aC3D, aC2D, aS, aFirst, aLast, aD, aT))
if (IntTools_Tools::ComputeTolerance (aC3D, aC2D, aS, aFirst, aLast, aD, aT, Precision::PConfusion(), theToRunParallel))
{
if (aD > aTolC)
{

View File

@@ -48,7 +48,9 @@ public:
//! Intersects underliing surfaces of F1 and F2
//! Use sum of tolerance of F1 and F2 as intersection
//! criteria
Standard_EXPORT void Perform (const TopoDS_Face& F1, const TopoDS_Face& F2);
Standard_EXPORT void Perform (const TopoDS_Face& F1,
const TopoDS_Face& F2,
const Standard_Boolean theToRunParallel = Standard_False);
//! Returns True if the intersection was successful
@@ -106,7 +108,7 @@ protected:
//! as a maximal deviation between 3D curve and 2D curves on faces.<br>
//! If there are no 2D curves the maximal deviation between 3D curves
//! and surfaces is computed.
Standard_EXPORT void ComputeTolReached3d();
Standard_EXPORT void ComputeTolReached3d (const Standard_Boolean theToRunParallel);
protected:

View File

@@ -792,12 +792,13 @@ Standard_Boolean IntTools_Tools::ComputeTolerance
const Standard_Real theLast,
Standard_Real& theMaxDist,
Standard_Real& theMaxPar,
const Standard_Real theTolRange)
const Standard_Real theTolRange,
const Standard_Boolean theToRunParallel)
{
GeomLib_CheckCurveOnSurface aCS;
//
aCS.Init(theCurve3D, theSurf, theFirst, theLast, theTolRange);
aCS.Perform(theCurve2D);
aCS.Perform (theCurve2D, !theToRunParallel);
if (!aCS.IsDone()) {
return Standard_False;
}

View File

@@ -172,8 +172,8 @@ public:
const Standard_Real theLast,
Standard_Real& theMaxDist,
Standard_Real& theMaxPar,
const Standard_Real theTolRange =
Precision::PConfusion());
const Standard_Real theTolRange = Precision::PConfusion(),
const Standard_Boolean theToRunParallel = Standard_False);
//! Computes the correct Intersection range for