0024008: ShapeAnalysis_Surface causes exception in Geom_OffsetSurface
authorgka <gka@opencascade.com>
Thu, 28 Nov 2013 08:13:15 +0000 (12:13 +0400)
committerbugmaster <bugmaster@opencascade.com>
Thu, 28 Nov 2013 08:14:17 +0000 (12:14 +0400)
Refactoring on current master fix for bug 0024008: ShapeAnalysis_Surface causes exception in Geom_OffsetSurface.
And modified test scripts in order to avoid report regressions
Test cases for issue CR24008

src/QABugs/QABugs_19.cxx
src/ShapeAnalysis/ShapeAnalysis_Surface.cxx
tests/bugs/heal/bug24008_1 [new file with mode: 0755]
tests/bugs/heal/bug24008_2 [new file with mode: 0755]
tests/de/iges_1/P5 [changed mode: 0644->0755]
tests/de/iges_3/A4
tests/de/step_2/P3
tests/de/step_4/I2

index 04c9a8f..237ca85 100755 (executable)
@@ -567,6 +567,45 @@ static int test_offset(Draw_Interpretor& di, Standard_Integer argc, const char**
   return 0;
 }
 
+#include <Geom_Curve.hxx>
+#include <Geom_Surface.hxx>
+#include <Precision.hxx>
+#include <ShapeConstruct_ProjectCurveOnSurface.hxx>
+//=======================================================================
+//function : OCC24008
+//purpose  : 
+//=======================================================================
+static Standard_Integer OCC24008 (Draw_Interpretor& di, Standard_Integer argc, const char ** argv)
+{
+  if (argc != 3) {
+    di << "Usage: " << argv[0] << " invalid number of arguments" << "\n";
+    return 1;
+  }
+  Handle(Geom_Curve) aCurve = DrawTrSurf::GetCurve(argv[1]);
+  Handle(Geom_Surface) aSurf = DrawTrSurf::GetSurface(argv[2]);
+  if (aCurve.IsNull()) {
+    di << "Curve was not read" << "\n";
+       return 1;
+  }
+  if (aSurf.IsNull()) {
+       di << "Surface was not read" << "\n";
+       return 1;
+  }
+  ShapeConstruct_ProjectCurveOnSurface aProj;
+  aProj.Init (aSurf, Precision::Confusion());
+  try {
+    Handle(Geom2d_Curve) aPCurve;
+    aProj.Perform (aCurve, aCurve->FirstParameter(), aCurve->LastParameter(), aPCurve);
+    if (aPCurve.IsNull()) {
+         di << "PCurve was not created" << "\n";
+         return 1;
+    }
+  } catch (...) {
+    di << "Exception was caught" << "\n";
+  }
+  return 0;
+}
+
 #include <GeomAdaptor_Surface.hxx>
 #include <Draw.hxx>
 //=======================================================================
@@ -1410,6 +1449,7 @@ void QABugs::Commands_19(Draw_Interpretor& theCommands) {
   theCommands.Add ("OCC23952intersect", "OCC23952intersect nbsol shape1 shape2", __FILE__, OCC23952intersect, group);
   theCommands.Add ("test_offset", "test_offset", __FILE__, test_offset, group);
   theCommands.Add("OCC23945", "OCC23945 surfname U V X Y Z [DUX DUY DUZ DVX DVY DVZ [D2UX D2UY D2UZ D2VX D2VY D2VZ D2UVX D2UVY D2UVZ]]", __FILE__, OCC23945,group);
+  theCommands.Add ("OCC24008", "OCC24008 curve surface", __FILE__, OCC24008, group);
   theCommands.Add ("OCC24019", "OCC24019 aShape", __FILE__, OCC24019, group);
   theCommands.Add ("OCC11758", "OCC11758", __FILE__, OCC11758, group);
   theCommands.Add ("OCC24005", "OCC24005 result", __FILE__, OCC24005, group);
index 6308a12..9db0038 100755 (executable)
@@ -828,7 +828,7 @@ Standard_Boolean ShapeAnalysis_Surface::SurfaceNewton(const gp_Pnt2d &p2dPrev,
     dv = ( rs * ( ( ru ^ n ) + rv * rSuu - ru * rSuv ) ) * fract;
     U += du;
     V += dv;
-
+    if ( U < UF || U > UL || V < VF || V > VL ) break;
     // check that iterations do not diverge
 //pdn    Standard_Real rs2 = rs.SquareMagnitude();
 //    if ( rs2 > 4.*rs2p ) break;
@@ -838,7 +838,7 @@ Standard_Boolean ShapeAnalysis_Surface::SurfaceNewton(const gp_Pnt2d &p2dPrev,
     Standard_Real aResolution = Max(1e-12,(U+V)*10e-16);
     if ( fabs ( du ) + fabs ( dv ) > aResolution ) continue; //Precision::PConfusion()  continue;
 
-    if ( U < UF || U > UL || V < VF || V > VL ) break;
+    //if ( U < UF || U > UL || V < VF || V > VL ) break;
 
     //pdn PRO10109 4517: protect against wrong result
     Standard_Real rs2 = rs.SquareMagnitude();
diff --git a/tests/bugs/heal/bug24008_1 b/tests/bugs/heal/bug24008_1
new file mode 100755 (executable)
index 0000000..a7a2f17
--- /dev/null
@@ -0,0 +1,19 @@
+puts "========"
+puts "OCC24008"
+puts "========"
+puts ""
+#################################################################
+# ShapeAnalysis_Surface causes exception in Geom_OffsetSurface
+#################################################################
+
+pload QAcommands
+
+restore [locate_data_file bug24008_curv_6964.draw] a
+restore [locate_data_file bug24008_surf_6962.draw] b
+
+set info [OCC24008 a b]
+if { [regexp "Exception" $info] != 0 } {
+    puts "Error : Exception was caught"
+} else {
+    puts "OK: COmmand wrong propery"
+}
diff --git a/tests/bugs/heal/bug24008_2 b/tests/bugs/heal/bug24008_2
new file mode 100755 (executable)
index 0000000..d6670f8
--- /dev/null
@@ -0,0 +1,20 @@
+puts "========"
+puts "OCC24008"
+puts "========"
+puts ""
+#################################################################
+# ShapeAnalysis_Surface causes exception in Geom_OffsetSurface
+#################################################################
+
+pload QAcommands
+
+restore [locate_data_file bug24008_curv_rbp.draw] a
+restore [locate_data_file bug24008_surf_rbls.draw] b
+
+set info [OCC24008 a b]
+if { [regexp "Exception" $info] != 0 } {
+    puts "Error : Exception was caught"
+} else {
+    puts "OK: COmmand wrong propery"
+}
+
old mode 100644 (file)
new mode 100755 (executable)
index 0e7d33e..d90d80d
@@ -9,11 +9,11 @@ set filename brazo1.igs
 
 set ref_data {
 DATA        : Faulties = 0  ( 2 )  Warnings = 0  ( 0 )  Summary  = 0  ( 2 )
-TPSTAT      : Faulties = 0  ( 0 )  Warnings = 187  ( 454 )  Summary  = 187  ( 454 )
+TPSTAT      : Faulties = 0  ( 0 )  Warnings = 139  ( 454 )  Summary  = 139  ( 454 )
 CHECKSHAPE  : Wires    = 6  ( 8 )  Faces    = 6  ( 8 )  Shells   = 0  ( 0 )   Solids   = 0 ( 0 )
-NBSHAPES    : Solid    = 0  ( 0 )  Shell    = 0  ( 0 )  Face     = 223  ( 223 )   Summary  = 4659  ( 4555 )
-STATSHAPE   : Solid    = 0  ( 0 )  Shell    = 0  ( 0 )  Face     = 223  ( 223 )   FreeWire = 0  ( 0 )   FreeEdge  = 0 ( 0 )   SharedEdge = 2133  ( 2075 )
-TOLERANCE   : MaxTol   =    0.991254355  (    0.991254355 )  AvgTol   =   0.01129351736  (   0.01223705309 )
+NBSHAPES    : Solid    = 0  ( 0 )  Shell    = 0  ( 0 )  Face     = 223  ( 223 )   Summary  = 4647  ( 4551 )
+STATSHAPE   : Solid    = 0  ( 0 )  Shell    = 0  ( 0 )  Face     = 223  ( 223 )   FreeWire = 0  ( 0 )   FreeEdge  = 0 ( 0 )   SharedEdge = 2125  ( 2071 )
+TOLERANCE   : MaxTol   =    0.991254355  (    0.991254355 )  AvgTol   =   0.01133191547  (   0.01225912551 )
 LABELS      : N0Labels = 223  ( 223 )  N1Labels = 0  ( 256 )  N2Labels = 0  ( 0 )   TotalLabels = 223  ( 479 )   NameLabels = 223  ( 388 )   ColorLabels = 223  ( 479 )   LayerLabels = 223  ( 479 )
 PROPS       : Centroid = 0  ( 0 )  Volume   = 0  ( 0 )  Area     = 0  ( 0 )
 NCOLORS     : NColors  = 3  ( 3 )
index f8dd483..dff04e2 100644 (file)
@@ -10,12 +10,12 @@ set filename BUC40132.igs
 
 set ref_data {
 DATA        : Faulties = 0  ( 0 )  Warnings = 0  ( 0 )  Summary  = 0  ( 0 )
-TPSTAT      : Faulties = 0  ( 238 )  Warnings = 484  ( 2532 )  Summary  = 484  ( 2770 )
+TPSTAT      : Faulties = 0  ( 238 )  Warnings = 483  ( 2531 )  Summary  = 483  ( 2769 )
 CHECKSHAPE  : Wires    = 3  ( 3 )  Faces    = 3  ( 3 )  Shells   = 0  ( 0 )   Solids   = 0 ( 0 )
-NBSHAPES    : Solid    = 0  ( 0 )  Shell    = 0  ( 0 )  Face     = 1346  ( 1345 )   Summary  = 22215  ( 22292 )
-STATSHAPE   : Solid    = 0  ( 0 )  Shell    = 0  ( 0 )  Face     = 1346  ( 1345 )   FreeWire = 96  ( 170 )   FreeEdge  = 1061 ( 1061 )   SharedEdge = 9271  ( 9277 )
-TOLERANCE   : MaxTol   =   0.8099726869  (    1.367966665 )  AvgTol   =  0.008004679127  (   0.00836844767 )
-LABELS      : N0Labels = 27  ( 27 )  N1Labels = 2100  ( 6101 )  N2Labels = 0  ( 0 )   TotalLabels = 2127  ( 6128 )   NameLabels = 2127  ( 2596 )   ColorLabels = 2114  ( 6127 )   LayerLabels = 2114  ( 6127 )
+NBSHAPES    : Solid    = 0  ( 0 )  Shell    = 0  ( 0 )  Face     = 1346  ( 1345 )   Summary  = 22207  ( 22290 )
+STATSHAPE   : Solid    = 0  ( 0 )  Shell    = 0  ( 0 )  Face     = 1346  ( 1345 )   FreeWire = 96  ( 170 )   FreeEdge  = 1061 ( 1061 )   SharedEdge = 9265  ( 9275 )
+TOLERANCE   : MaxTol   =   0.8630766579  (    1.367916315 )  AvgTol   =  0.008034943314  (  0.008258022117 )
+LABELS      : N0Labels = 27  ( 27 )  N1Labels = 2100  ( 6099 )  N2Labels = 0  ( 0 )   TotalLabels = 2127  ( 6126 )   NameLabels = 2127  ( 2596 )   ColorLabels = 2114  ( 6125 )   LayerLabels = 2114  ( 6125 )
 PROPS       : Centroid = 0  ( 0 )  Volume   = 0  ( 0 )  Area     = 0  ( 0 )
 NCOLORS     : NColors  = 11  ( 12 )
 COLORS      : Colors   = BLUE1 CYAN1 CYAN2 DARKGOLDENROD GREEN MAGENTA1 PALEVIOLETRED1 RED TURQUOISE2 WHITE YELLOW  ( BLUE1 CYAN1 CYAN2 DARKGOLDENROD GRAY53 GREEN MAGENTA1 PALEVIOLETRED1 RED TURQUOISE2 WHITE YELLOW )
index bfbee9b..25c1440 100644 (file)
@@ -1,13 +1,16 @@
 # !!!! This file is generated automatically, do not edit manually! See end script
+puts "TODO CR23096 ALL: TPSTAT : Faulty" 
+
+
 set filename r31ct.stp
 
 set ref_data {
 DATA        : Faulties = 0  ( 0 )  Warnings = 0  ( 0 )  Summary  = 0  ( 0 )
-TPSTAT      : Faulties = 0  ( 0 )  Warnings = 4  ( 4 )  Summary  = 4  ( 4 )
-CHECKSHAPE  : Wires    = 0  ( 1 )  Faces    = 0  ( 1 )  Shells   = 0  ( 0 )   Solids   = 0 ( 0 )
-NBSHAPES    : Solid    = 3  ( 3 )  Shell    = 3  ( 3 )  Face     = 127  ( 127 )   Summary  = 694  ( 694 )
-STATSHAPE   : Solid    = 3  ( 3 )  Shell    = 3  ( 3 )  Face     = 127  ( 127 )   FreeWire = 0  ( 0 )   FreeEdge  = 0 ( 0 )   SharedEdge = 268  ( 268 )
-TOLERANCE   : MaxTol   =    2.392489823  (    2.392489823 )  AvgTol   =    0.0228313324  (   0.02283092055 )
+TPSTAT      : Faulties = 0  ( 0 )  Warnings = 14  ( 4 )  Summary  = 14  ( 4 )
+CHECKSHAPE  : Wires    = 0  ( 0 )  Faces    = 0  ( 0 )  Shells   = 0  ( 0 )   Solids   = 0 ( 0 )
+NBSHAPES    : Solid    = 3  ( 3 )  Shell    = 3  ( 3 )  Face     = 127  ( 127 )   Summary  = 695  ( 694 )
+STATSHAPE   : Solid    = 3  ( 3 )  Shell    = 3  ( 3 )  Face     = 127  ( 127 )   FreeWire = 0  ( 0 )   FreeEdge  = 0 ( 0 )   SharedEdge = 269  ( 268 )
+TOLERANCE   : MaxTol   =   0.0357587389  (   0.0357587389 )  AvgTol   =  0.000777057905  (  0.0007804686376 )
 LABELS      : N0Labels = 1  ( 1 )  N1Labels = 0  ( 0 )  N2Labels = 0  ( 0 )   TotalLabels = 1  ( 1 )   NameLabels = 1  ( 1 )   ColorLabels = 0  ( 0 )   LayerLabels = 0  ( 0 )
 PROPS       : Centroid = 0  ( 0 )  Volume   = 0  ( 0 )  Area     = 0  ( 0 )
 NCOLORS     : NColors  = 0  ( 0 )
index dbd1da9..15f5c62 100644 (file)
@@ -3,11 +3,11 @@ set filename PRO8853.stp
 
 set ref_data {
 DATA        : Faulties = 0  ( 0 )  Warnings = 0  ( 0 )  Summary  = 0  ( 0 )
-TPSTAT      : Faulties = 0  ( 0 )  Warnings = 328  ( 344 )  Summary  = 328  ( 344 )
-CHECKSHAPE  : Wires    = 0  ( 1 )  Faces    = 0  ( 1 )  Shells   = 0  ( 0 )   Solids   = 0 ( 0 )
-NBSHAPES    : Solid    = 1  ( 1 )  Shell    = 1  ( 1 )  Face     = 1858  ( 1858 )   Summary  = 12128  ( 12125 )
-STATSHAPE   : Solid    = 1  ( 1 )  Shell    = 1  ( 1 )  Face     = 1858  ( 1858 )   FreeWire = 0  ( 0 )   FreeEdge  = 0 ( 0 )   SharedEdge = 5037  ( 5034 )
-TOLERANCE   : MaxTol   =  0.02256463189  (  0.02260559351 )  AvgTol   =  0.0007883955887  (  0.0008034259318 )
+TPSTAT      : Faulties = 0  ( 0 )  Warnings = 325  ( 343 )  Summary  = 325  ( 343 )
+CHECKSHAPE  : Wires    = 0  ( 0 )  Faces    = 0  ( 0 )  Shells   = 0  ( 0 )   Solids   = 0 ( 0 )
+NBSHAPES    : Solid    = 1  ( 1 )  Shell    = 1  ( 1 )  Face     = 1858  ( 1858 )   Summary  = 12122  ( 12119 )
+STATSHAPE   : Solid    = 1  ( 1 )  Shell    = 1  ( 1 )  Face     = 1858  ( 1858 )   FreeWire = 0  ( 0 )   FreeEdge  = 0 ( 0 )   SharedEdge = 5033  ( 5030 )
+TOLERANCE   : MaxTol   = 0.009518071089  ( 0.009517975925 )  AvgTol   =  0.0007802070273  (  0.0007817341352 )
 LABELS      : N0Labels = 1  ( 1 )  N1Labels = 858  ( 858 )  N2Labels = 0  ( 0 )   TotalLabels = 859  ( 859 )   NameLabels = 1  ( 1 )   ColorLabels = 859  ( 859 )   LayerLabels = 0  ( 0 )
 PROPS       : Centroid = 0  ( 0 )  Volume   = 0  ( 0 )  Area     = 0  ( 0 )
 NCOLORS     : NColors  = 2  ( 2 )