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

0027722: Data Exchange - STEP error for Ellipse revol shape

Add support for calculating singularity for an incorrect revolution
This commit is contained in:
dpasukhi
2020-11-22 23:29:51 +03:00
parent 0f5a1a9485
commit 1cd8d5469d
2 changed files with 54 additions and 0 deletions

View File

@@ -256,6 +256,28 @@ void ShapeAnalysis_Surface::ComputeSingularities()
myPreci[3] = Max(Corner2.Distance(Corner4), Max(myP3d[3].Distance(Corner2), myP3d[3].Distance(Corner4)));
myNbDeg = 4;
// sphere is a result of revolution ( degenerate revolution )
if (Corner1.IsEqual(Corner2, Precision::Confusion()) && myP3d[0].IsEqual(myP3d[1], Precision::Confusion()) &&
Corner2.IsEqual(Corner3, Precision::Confusion()) && myP3d[1].IsEqual(myP3d[2], Precision::Confusion()) &&
Corner3.IsEqual(Corner4, Precision::Confusion()) && myP3d[2].IsEqual(myP3d[3], Precision::Confusion()) &&
mySurf->IsKind(STANDARD_TYPE(Geom_SurfaceOfRevolution)))
{
myPreci[0] = myPreci[1] = 0;
myP3d[0] = mySurf->Value(su1, 0.25 * (sv2 + su1));
myFirstP2d[0].SetCoord(su1, sv2);
myLastP2d[0].SetCoord(su2, sv2);
myP3d[1] = mySurf->Value(su2, 0.75 * (sv1 + su2));
myFirstP2d[1].SetCoord(su2, sv1);
myLastP2d[1].SetCoord(su1, sv1);
myFirstPar[0] = myFirstPar[1] = su1;
myLastPar[0] = myLastPar[1] = su2;
myUIsoDeg[0] = myUIsoDeg[1] = Standard_False;
myNbDeg = 2;
}
}
SortSingularities();
}

32
tests/bugs/step/bug27722 Normal file
View File

@@ -0,0 +1,32 @@
puts "==================================================="
puts "0027722: Data Exchange - STEP error for Ellipse revol shape"
puts "==================================================="
puts ""
vinit
ellipse ge 0 0 20 10
mkedge te ge 0 pi/2.0
revol re te 0 0 0 0 1 0 360
vdisplay te re
vtrihedron vt
# save to STEP in mode: As Is.
stepwrite a re ${imagedir}/orig.stp
# read STEP
stepread ${imagedir}/orig.stp sr *
ttranslate sr_1 50 0 0
vdisplay sr_1
checkshape sr_1
axo
fit
checkview -screenshot -2d -path ${imagedir}/${test_image}.png