1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-08-14 13:30:48 +03:00

0025111: Incomplete section curve between Conical and Toroidal surfaces

Correction of test cases for CR25111

Test cases for issue CR25111
This commit is contained in:
jgv
2014-08-21 12:04:56 +04:00
committed by bugmaster
parent 21678ea94a
commit 10ee997695
4 changed files with 90 additions and 4 deletions

View File

@@ -2330,6 +2330,8 @@ static Standard_Boolean DecomposeResult(const Handle(IntPatch_Line)& theLine,
// build WLine parts (if any)
Standard_Boolean flNextLine = Standard_True;
Standard_Boolean hasBeenDecomposed = Standard_False;
Standard_Boolean PrePointExist = Standard_False;
IntSurf_PntOn2S PrePoint;
while(flNextLine)
{
// reset variables
@@ -2342,6 +2344,12 @@ static Standard_Boolean DecomposeResult(const Handle(IntPatch_Line)& theLine,
//if((Lindex-Findex+1) <= 2 )
if(aLindex <= aFindex)
return hasBeenDecomposed;
if (PrePointExist)
{
sline->Add(PrePoint);
PrePointExist = Standard_False;
}
// analyze other points
for(Standard_Integer k = aFindex; k <= aLindex; k++)
@@ -2358,6 +2366,7 @@ static Standard_Boolean DecomposeResult(const Handle(IntPatch_Line)& theLine,
}
sline->Add(aSSLine->Value(k));
PrePoint = aSSLine->Value(k);
continue;
}
@@ -2374,10 +2383,56 @@ static Standard_Boolean DecomposeResult(const Handle(IntPatch_Line)& theLine,
{
aBindex = k;
isDecomposited = Standard_True;
////
if (Abs(U1) <= Precision::PConfusion() ||
Abs(U1 - 2*M_PI) <= Precision::PConfusion())
{
IntSurf_PntOn2S NewPoint;
IntSurf_PntOn2S CurPoint = aSSLine->Value(k);
gp_Pnt thePnt = CurPoint.Value();
Standard_Real theU1, theV1, theU2, theV2;
theU1 = (Abs(U1) <= Precision::PConfusion())? 2*M_PI : 0.;
theV1 = V1;
NewPoint.SetValue(thePnt);
if (!IsReversed)
{
CurPoint.ParametersOnS2(theU2, theV2);
NewPoint.SetValue(theU1, theV1, theU2, theV2);
}
else
{
CurPoint.ParametersOnS1(theU2, theV2);
NewPoint.SetValue(theU2, theV2, theU1, theV1);
}
sline->Add(NewPoint);
}
else if (Abs(AnU1) <= Precision::PConfusion() ||
Abs(AnU1 - 2*M_PI) <= Precision::PConfusion())
{
//Modify <PrePoint>
PrePointExist = Standard_True;
Standard_Real theU1, theV1;
if (!IsReversed)
{
PrePoint.ParametersOnS1(theU1, theV1);
theU1 = (Abs(AnU1) <= Precision::PConfusion())? 2*M_PI : 0.;
PrePoint.SetValue(Standard_True, //on first
theU1, theV1);
}
else
{
PrePoint.ParametersOnS2(theU1, theV1);
theU1 = (Abs(AnU1) <= Precision::PConfusion())? 2*M_PI : 0.;
PrePoint.SetValue(Standard_False, //on second
theU1, theV1);
}
}
////
break;
}
sline->Add(aSSLine->Value(k));
PrePoint = aSSLine->Value(k);
AnU1=U1;
}