From: dpasukhi Date: Sun, 22 Nov 2020 20:29:51 +0000 (+0300) Subject: 0027722: Data Exchange - STEP error for Ellipse revol shape X-Git-Url: http://git.dev.opencascade.org/gitweb/?a=commitdiff_plain;h=1cd8d5469d0d92b4dca2bd955a508e350a995a99;p=occt-copy.git 0027722: Data Exchange - STEP error for Ellipse revol shape Add support for calculating singularity for an incorrect revolution --- diff --git a/src/ShapeAnalysis/ShapeAnalysis_Surface.cxx b/src/ShapeAnalysis/ShapeAnalysis_Surface.cxx index df36693333..caaa939ddc 100644 --- a/src/ShapeAnalysis/ShapeAnalysis_Surface.cxx +++ b/src/ShapeAnalysis/ShapeAnalysis_Surface.cxx @@ -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(); } diff --git a/tests/bugs/step/bug27722 b/tests/bugs/step/bug27722 new file mode 100644 index 0000000000..fbb25b22e1 --- /dev/null +++ b/tests/bugs/step/bug27722 @@ -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 +