0007570: Exception in ShapeFix_Wireframe::FixSmallEdges
authorpdn <pdn@opencascade.com>
Thu, 16 Oct 2014 10:24:19 +0000 (14:24 +0400)
committerbugmaster <bugmaster@opencascade.com>
Thu, 16 Oct 2014 10:26:12 +0000 (14:26 +0400)
Exception fixed by checking if subshape removed completely.

Test-case for issue #7570

src/QABugs/QABugs_19.cxx
src/ShapeFix/ShapeFix_Wireframe.cxx
tests/bugs/heal/bug7570 [new file with mode: 0644]

index 54aa72b..24dbedd 100755 (executable)
@@ -2861,6 +2861,27 @@ static Standard_Integer OCC25202 ( Draw_Interpretor& theDI,
   return 0;
 }
 
+#include <ShapeFix_Wireframe.hxx>
+//=======================================================================
+//function : OCC7570
+//purpose  : 
+//=======================================================================
+static Standard_Integer OCC7570 (Draw_Interpretor& di, Standard_Integer n, const char** a)
+{
+  if (n != 2) {
+    di<<"Usage: "<<a[0]<<" invalid number of arguments"<<"\n";
+    return 1;
+  }
+  TopoDS_Shape in_shape (DBRep::Get (a[1]));
+  ShapeFix_Wireframe fix_tool (in_shape);
+  fix_tool.ModeDropSmallEdges () = Standard_True;
+  fix_tool.SetPrecision (1.e+6);
+  fix_tool.SetLimitAngle (0.01);
+  fix_tool.FixSmallEdges ();
+  TopoDS_Shape new_shape = fix_tool.Shape ();
+  return 0;
+}
+
 /*****************************************************************************/
 
 void QABugs::Commands_19(Draw_Interpretor& theCommands) {
@@ -2918,5 +2939,6 @@ void QABugs::Commands_19(Draw_Interpretor& theCommands) {
   theCommands.Add ("OCC25043", "OCC25043 shape", __FILE__, OCC25043, group);
   theCommands.Add ("OCC24606", "OCC24606 : Tests ::FitAll for V3d view ('vfit' is for NIS view)", __FILE__, OCC24606, group);
   theCommands.Add ("OCC25202", "OCC25202 res shape numF1 face1 numF2 face2", __FILE__, OCC25202, group);
+  theCommands.Add ("OCC7570", "OCC7570 shape", __FILE__, OCC7570, group);
   return;
 }
index 64fefdb..508d547 100644 (file)
@@ -426,16 +426,21 @@ ShapeFix_Wireframe::ShapeFix_Wireframe(const TopoDS_Shape& shape)
       TopoDS_Shape res;
       if ( cont.IsBound ( shape1 ) )
       {
-       res = cont.Find ( shape1 ).Oriented ( shape1.Orientation() );
+        res = cont.Find ( shape1 ).Oriented ( shape1.Orientation() );
       }
       else 
       {
-       myShape = shape1;
-       FixSmallEdges();
-       res = Shape();
-       cont.Bind(myShape,res);
+        myShape = shape1;
+        FixSmallEdges();
+        res = Shape();
+        cont.Bind(myShape,res);
       }
       if ( ! res.IsSame ( shape1 ) ) locModified = Standard_True;
+
+      //check if resulting shape if not empty
+      if( res.IsNull())
+        continue;
+
       res.Location ( L );
       B.Add ( C, res );
       
diff --git a/tests/bugs/heal/bug7570 b/tests/bugs/heal/bug7570
new file mode 100644 (file)
index 0000000..01130d4
--- /dev/null
@@ -0,0 +1,13 @@
+puts "======="
+puts "OCC7570"
+puts "======="
+puts ""
+##################################################
+# Exception in ShapeFix_Wireframe::FixSmallEdges
+##################################################
+
+pload QAcommands
+
+restore [locate_data_file bug7570_small.brep] a
+
+OCC7570 a