From 0a807dd9a320d93306dfea222ae5976a7a355549 Mon Sep 17 00:00:00 2001 From: emv Date: Tue, 5 Dec 2017 14:22:22 +0300 Subject: [PATCH] 0029351: Boolean Operations create invalid pcurves When making pcurve for edge on face make sure that the produced 2D curve will have the same range as 3D curve of the edge. --- src/BOPTools/BOPTools_AlgoTools2D.cxx | 22 ++++++++++++++++++---- tests/bugs/modalg_4/bug697_1 | 1 - tests/bugs/modalg_4/bug697_5 | 1 - 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/BOPTools/BOPTools_AlgoTools2D.cxx b/src/BOPTools/BOPTools_AlgoTools2D.cxx index 41d51b6ad2..b24667e264 100644 --- a/src/BOPTools/BOPTools_AlgoTools2D.cxx +++ b/src/BOPTools/BOPTools_AlgoTools2D.cxx @@ -44,6 +44,7 @@ #include #include #include +#include #include #include #include @@ -618,12 +619,25 @@ void BOPTools_AlgoTools2D::MakePCurveOnFace } // TolReached2d=aTolR; - // + + // Adjust curve for periodic surface Handle(Geom2d_Curve) aC2DA; BOPTools_AlgoTools2D::AdjustPCurveOnSurf (*pBAS, aT1, aT2, aC2D, aC2DA); - // - aC2D=aC2DA; - // + aC2D = aC2DA; + + // Make sure that the range of the 2D curve is sufficient for representation of the 3D curve. + Standard_Real aTCFirst = aC2D->FirstParameter(); + Standard_Real aTCLast = aC2D->LastParameter(); + if ((aTCFirst - aT1) > Precision::PConfusion() || + (aT2 - aTCLast ) > Precision::PConfusion()) + { + if (aTCFirst < aT1) aTCFirst = aT1; + if (aTCLast > aT2) aTCLast = aT2; + + GeomLib::SameRange(Precision::PConfusion(), aC2D, + aTCFirst, aTCLast, aT1, aT2, aC2D); + } + // compute the appropriate tolerance for the edge Handle(Geom_Surface) aS = pBAS->Surface().Surface(); aS = Handle(Geom_Surface)::DownCast(aS->Transformed(pBAS->Trsf())); diff --git a/tests/bugs/modalg_4/bug697_1 b/tests/bugs/modalg_4/bug697_1 index 54e4fe3a57..8e1dd065c6 100755 --- a/tests/bugs/modalg_4/bug697_1 +++ b/tests/bugs/modalg_4/bug697_1 @@ -1,4 +1,3 @@ -puts "TODO OCC29351 ALL: Faulty shapes in variables faulty_1 to faulty_2 " puts "============" puts "OCC697" puts "============" diff --git a/tests/bugs/modalg_4/bug697_5 b/tests/bugs/modalg_4/bug697_5 index 614820758e..49c6f55261 100755 --- a/tests/bugs/modalg_4/bug697_5 +++ b/tests/bugs/modalg_4/bug697_5 @@ -1,4 +1,3 @@ -puts "TODO OCC29351 ALL: Faulty shapes in variables faulty_1 to faulty_2 " puts "============" puts "OCC697" puts "============"