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

0026699: Wrong section curves

1. Algorithm of Restriction line processing has been improved in IntTools_FaceFace.cxx file.
2. Algorithm of checking, if Restriction line and Walking line are coincided has been improved in IntPatch_ImpPrmIntersection.cxx file.
3. Algorithm of extending check if starting point of Walking line is a tangent point has been added.

Small correction of some test cases.
Creation of test case for issue #0026699.

Small correction of test case for issue CR26699
This commit is contained in:
nbv
2015-10-28 10:10:37 +03:00
committed by bugmaster
parent 5344638378
commit 71958f7db2
7 changed files with 157 additions and 86 deletions

View File

@@ -657,7 +657,7 @@ void IntTools_FaceFace::Perform(const TopoDS_Face& aF1,
//
const Standard_Integer aNbLinIntersector = myIntersector.NbLines();
for (Standard_Integer i=1; i <= aNbLinIntersector; ++i) {
MakeCurve(i, dom1, dom2);
MakeCurve(i, dom1, dom2, TolArc);
}
//
ComputeTolReached3d();
@@ -841,9 +841,10 @@ Standard_Real IntTools_FaceFace::ComputeTolerance()
//function : MakeCurve
//purpose :
//=======================================================================
void IntTools_FaceFace::MakeCurve(const Standard_Integer Index,
const Handle(Adaptor3d_TopolTool)& dom1,
const Handle(Adaptor3d_TopolTool)& dom2)
void IntTools_FaceFace::MakeCurve(const Standard_Integer Index,
const Handle(Adaptor3d_TopolTool)& dom1,
const Handle(Adaptor3d_TopolTool)& dom2,
const Standard_Real theToler)
{
Standard_Boolean bDone, rejectSurface, reApprox, bAvoidLineConstructor;
Standard_Boolean ok, bPCurvesOk;
@@ -2050,16 +2051,27 @@ Standard_Real IntTools_FaceFace::ComputeTolerance()
GeomInt_IntSS::
TrimILineOnSurfBoundaries(aC2d1, aC2d2, aBox1, aBox2, anArrayOfParameters);
//Intersect with true boundaries. After that, enlarge bounding-boxes in order to
//correct definition, if point on curve is inscribed in the box.
aBox1.Enlarge(theToler);
aBox2.Enlarge(theToler);
const Standard_Integer aNbIntersSolutionsm1 = anArrayOfParameters.Length() - 1;
//Trim RLine found.
for(Standard_Integer anInd = 0; anInd < aNbIntersSolutionsm1; anInd++)
{
const Standard_Real aParF = anArrayOfParameters(anInd),
aParL = anArrayOfParameters(anInd+1);
Standard_Real &aParF = anArrayOfParameters(anInd),
&aParL = anArrayOfParameters(anInd+1);
if((aParL - aParF) <= Precision::PConfusion())
{
//In order to more precise extending to the boundaries of source curves.
if(anInd < aNbIntersSolutionsm1-1)
aParL = aParF;
continue;
}
const Standard_Real aPar = 0.5*(aParF + aParL);
gp_Pnt2d aPt;