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

0033615: Modeling Algorithms - Partition algorithm creates unexpected vertices

This problem occurs because of obtaining 2 ALines which share same vertex on the seam edge.
There should be 2 different vertices with same(or almost the same) 3d parameters, but
with different UV parameters because of periodic surface.
Current fix allows to avoid the same vertices on seam edge and also checks the next vertex.
Added consideration of predicted next point to avoid skipping tha point which is not on seam edge.
Added test case for #33702
This commit is contained in:
akaftase
2024-07-07 19:54:35 +01:00
committed by Pasukhin Dmitry
parent 818c68f22e
commit 5811a330c7
5 changed files with 56 additions and 2 deletions

View File

@@ -647,6 +647,26 @@ void IntPatch_ALineToWLine::MakeWLine(const Handle(IntPatch_ALine)& theALine,
{// Strictly equal!!!
break;
}
else if (aParameter + aStep < theLPar)
{
// Prediction of the next point
gp_Pnt aPnt3dNext;
gp_Vec aTg;
theALine->D1(aParameter + aStep, aPnt3dNext, aTg);
Standard_Real anU1 = 0.0, aV1 = 0.0, anU2 = 0.0, aV2 = 0.0;
myQuad1.Parameters(aPnt3dNext, anU1, aV1);
myQuad2.Parameters(aPnt3dNext, anU2, aV2);
IntSurf_PntOn2S aPOn2SNext;
aPOn2SNext.SetValue(aPnt3dNext, anU1, aV1, anU2, aV2);
if (aPOn2SNext.ValueOnSurface(0).SquareDistance(aRPT.ValueOnSurface(0)) > M_PI * M_PI ||
aPOn2SNext.ValueOnSurface(1).SquareDistance(aRPT.ValueOnSurface(1)) > M_PI * M_PI)
{
aPrevLPoint = aRPT;
aPrevParam = aParameter;
continue;
}
}
}
aPrePointExist = IntPatch_SPntNone;