mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-04-10 18:51:21 +03:00
0025380: Intersection curve cannot reach boundary of surface
Changed next point computation in point walker. Now trying to walk over another isoline if new point is too close to previous.
This commit is contained in:
parent
a5a0a4399f
commit
95ee0712bc
@ -774,7 +774,43 @@ void IntWalk_PWalking::Perform(const TColStd_Array1OfReal& ParDep,
|
||||
SvParam[2]=Param(3);
|
||||
SvParam[3]=Param(4);
|
||||
//
|
||||
ChoixIso= myIntersectionOn2S.Perform(Param, Rsnld, ChoixIso);
|
||||
Standard_Integer aTryNumber = 0;
|
||||
Standard_Real isBadPoint = Standard_False;
|
||||
IntImp_ConstIsoparametric aBestIso = ChoixIso;
|
||||
do
|
||||
{
|
||||
isBadPoint = Standard_False;
|
||||
|
||||
ChoixIso= myIntersectionOn2S.Perform(Param, Rsnld, aBestIso);
|
||||
|
||||
if (myIntersectionOn2S.IsDone() && !myIntersectionOn2S.IsEmpty())
|
||||
{
|
||||
Standard_Real aNewPnt[4], anAbsParamDist[4];
|
||||
myIntersectionOn2S.Point().Parameters(aNewPnt[0], aNewPnt[1], aNewPnt[2], aNewPnt[3]);
|
||||
|
||||
if (aNewPnt[0] < u1min || aNewPnt[0] > u1max ||
|
||||
aNewPnt[1] < v1min || aNewPnt[1] > v1max ||
|
||||
aNewPnt[2] < u2min || aNewPnt[2] > u2max ||
|
||||
aNewPnt[3] < v2min || aNewPnt[3] > v2max)
|
||||
{
|
||||
break; // Out of borders, handle this later.
|
||||
}
|
||||
|
||||
anAbsParamDist[0] = Abs(Param(1) - dP1 - aNewPnt[0]);
|
||||
anAbsParamDist[1] = Abs(Param(2) - dP2 - aNewPnt[1]);
|
||||
anAbsParamDist[2] = Abs(Param(3) - dP3 - aNewPnt[2]);
|
||||
anAbsParamDist[3] = Abs(Param(4) - dP4 - aNewPnt[3]);
|
||||
if (anAbsParamDist[0] < ResoU1 &&
|
||||
anAbsParamDist[1] < ResoV1 &&
|
||||
anAbsParamDist[2] < ResoU2 &&
|
||||
anAbsParamDist[3] < ResoV2 &&
|
||||
Status != IntWalk_PasTropGrand)
|
||||
{
|
||||
isBadPoint = Standard_True;
|
||||
aBestIso = IntImp_ConstIsoparametric((aBestIso + 1) % 4);
|
||||
}
|
||||
}
|
||||
} while (isBadPoint && ++aTryNumber <= 4);
|
||||
//
|
||||
if (!myIntersectionOn2S.IsDone())
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user