]> OCCT Git - occt-copy.git/commitdiff
0027722: Data Exchange - STEP error for Ellipse revol shape CR27722_1
authordpasukhi <dpasukhi@opencascade.com>
Sun, 22 Nov 2020 20:29:51 +0000 (23:29 +0300)
committerdpasukhi <dpasukhi@opencascade.com>
Sun, 22 Nov 2020 21:01:34 +0000 (00:01 +0300)
Add support for calculating singularity for an incorrect revolution

src/ShapeAnalysis/ShapeAnalysis_Surface.cxx
tests/bugs/step/bug27722 [new file with mode: 0644]

index df366933339f677da1a2a99a58676a3a363e0b1a..caaa939ddc7a0c9f755751488ae7e30966730b54 100644 (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();
 }
diff --git a/tests/bugs/step/bug27722 b/tests/bugs/step/bug27722
new file mode 100644 (file)
index 0000000..fbb25b2
--- /dev/null
@@ -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
+