From 1a196a871da625678dc9b43e7483630e907aaf90 Mon Sep 17 00:00:00 2001 From: nbv Date: Thu, 15 Feb 2018 14:38:59 +0300 Subject: [PATCH] 0029510: IntWalk_PWalking:: PutToBoundary(...) method results in appearing several coincident points in Walking-line Places have been detected where coincident points are created. The problem has been fixed. (cherry picked from commit 7c7cda9f73f8762d4999657a925f65cd02bc6864) --- src/IntWalk/IntWalk_PWalking.cxx | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/IntWalk/IntWalk_PWalking.cxx b/src/IntWalk/IntWalk_PWalking.cxx index 54c42a1304..e38bfd0535 100644 --- a/src/IntWalk/IntWalk_PWalking.cxx +++ b/src/IntWalk/IntWalk_PWalking.cxx @@ -2361,7 +2361,16 @@ SeekPointOnBoundary(const Handle(Adaptor3d_HSurface)& theASurf1, { aP1.SetXYZ(line->Value(aPInd).Value().XYZ()); if (aP1.SquareDistance(aPInt) > Precision::SquareConfusion()) + { break; + } + else if (aPInd == 1) + { + // After insertion, we will obtain + // two coincident points in the line. + // Therefore, insertion is forbidden. + return isOK; + } } for (++aPInd; aPInd <= aNbPnts; aPInd++) @@ -2402,7 +2411,16 @@ SeekPointOnBoundary(const Handle(Adaptor3d_HSurface)& theASurf1, { aPCurr.SetXYZ(line->Value(aPInd).Value().XYZ()); if (aPCurr.SquareDistance(aPInt) > Precision::SquareConfusion()) + { break; + } + else if (aPInd == aNbPnts) + { + // After insertion, we will obtain + // two coincident points in the line. + // Therefore, insertion is forbidden. + return isOK; + } } for (--aPInd; aPInd > 0; aPInd--) -- 2.39.5