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:
committed by
Pasukhin Dmitry
parent
818c68f22e
commit
5811a330c7
@@ -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;
|
||||
|
Reference in New Issue
Block a user