0026556: Infinite calculations of BRepOffset_MakeOffset
authoraml <aml@opencascade.com>
Thu, 20 Aug 2015 07:24:15 +0000 (10:24 +0300)
committerbugmaster <bugmaster@opencascade.com>
Fri, 4 Sep 2015 09:07:56 +0000 (12:07 +0300)
Method for preanalysis of input data added (CheckInputData).
Now it is possible to work with Error() function, which return error code.
Extended output support for all offset commands added.

Test-cases for issue #26556

49 files changed:
src/BRepOffset/BRepOffset_Error.hxx
src/BRepOffset/BRepOffset_MakeOffset.cxx
src/BRepOffset/BRepOffset_MakeOffset.hxx
src/BRepTest/BRepTest_FeatureCommands.cxx
tests/bugs/modalg_2/bug21261_15
tests/bugs/modalg_2/bug21261_21
tests/bugs/modalg_2/bug427_6
tests/bugs/modalg_2/bug5805_3
tests/bugs/modalg_2/bug5805_4
tests/bugs/modalg_4/bug5806
tests/bugs/modalg_6/bug26556_1 [new file with mode: 0644]
tests/bugs/modalg_6/bug26556_2 [new file with mode: 0644]
tests/bugs/modalg_6/bug26556_3 [new file with mode: 0644]
tests/bugs/modalg_6/bug26556_4 [new file with mode: 0644]
tests/offset/compshape/A1
tests/offset/compshape/A4
tests/offset/faces_type_a/A3
tests/offset/faces_type_a/A4
tests/offset/faces_type_a/A9
tests/offset/faces_type_i/A9
tests/offset/faces_type_i/B3
tests/offset/faces_type_i/B4
tests/offset/faces_type_i/B5
tests/offset/faces_type_i/B6
tests/offset/faces_type_i/C1
tests/offset/faces_type_i/C2
tests/offset/faces_type_i/C3
tests/offset/faces_type_i/C7
tests/offset/faces_type_i/D1
tests/offset/faces_type_i/D2
tests/offset/faces_type_i/D3
tests/offset/faces_type_i/E7
tests/offset/faces_type_i/E8
tests/offset/faces_type_i/E9
tests/offset/faces_type_i/F1
tests/offset/faces_type_i/F2
tests/offset/faces_type_i/F3
tests/offset/faces_type_i/F4
tests/offset/faces_type_i/F5
tests/offset/faces_type_i/I5
tests/offset/faces_type_i/J5
tests/offset/faces_type_i/J7
tests/offset/faces_type_i/K6
tests/offset/faces_type_i/M6
tests/offset/faces_type_i/M8
tests/offset/faces_type_i/N1
tests/offset/shape/A1
tests/offset/shape/A2
tests/offset/shape/A3

index 89621ed..447eec8 100644 (file)
 enum BRepOffset_Error
 {
 BRepOffset_NoError,
-BRepOffset_OffsetSurfaceFailed,
-BRepOffset_UnCorrectClosingFace,
-BRepOffset_ExtentFaceFailed,
-BRepOffset_RadiusEqualOffset,
-BRepOffset_UnknownError
+BRepOffset_UnknownError,
+BRepOffset_BadNormalsOnGeometry,
+BRepOffset_C0Geometry,
+BRepOffset_NullOffset,
+BRepOffset_NotConnectedShell
 };
 
 #endif // _BRepOffset_Error_HeaderFile
index b08afac..15b64e8 100644 (file)
 #include <TopTools_SequenceOfShape.hxx>
 #include <BRepBuilderAPI_Sewing.hxx>
 #include <Geom_Line.hxx>
+#include <NCollection_Vector.hxx>
 
 #include <stdio.h>
 // POP for NT
@@ -235,6 +236,11 @@ static void DEBVerticesControl (const TopTools_IndexedMapOfShape& NewEdges,
 }  
 #endif
 
+static BRepOffset_Error checkSinglePoint(const Standard_Real theUParam,
+                                         const Standard_Real theVParam,
+                                         const Handle(Geom_Surface)& theSurf,
+                                         const NCollection_Vector<gp_Pnt>& theBadPoints);
+
 //---------------------------------------------------------------------
 static void UpdateTolerance (      TopoDS_Shape&               myShape,
                             const TopTools_IndexedMapOfShape& myFaces);
@@ -679,28 +685,11 @@ void BRepOffset_MakeOffset::MakeOffsetShape()
     RemoveCorks (myShape,myFaces);
   }
 
-  if (! IsConnectedShell(myShape))
-    Standard_ConstructionError::Raise("BRepOffset_MakeOffset : Incorrect set of faces to remove, the remaining shell is not connected");
-
-  if (Abs(myOffset) <= myTol)
+  if (!CheckInputData())
   {
-    // Check for face with non-null offset value.
-    Standard_Boolean isFound = Standard_False;
-    TopTools_DataMapIteratorOfDataMapOfShapeReal anIter(myFaceOffset);
-    for( ; anIter.More(); anIter.Next())
-    {
-      if (Abs(anIter.Value()) > myTol)
-      {
-        isFound = Standard_True;
-        break;
-      }
-    }
-
-    if (!isFound)
-    {
-      // No face with non-null offset found.
-      return;
-    }
+    // There is error in input data.
+    // Check Error() method.
+    return;
   }
 
   TopAbs_State       Side = TopAbs_IN;
@@ -814,11 +803,18 @@ void BRepOffset_MakeOffset::MakeThickSolid()
   //--------------------------------------------------------------
   MakeOffsetShape ();
 
+  if (!myDone)
+  {
+    // Save return code and myDone state.
+    return;
+  }
+
   //--------------------------------------------------------------------
   // Construction of a solid with the initial shell, parallel shell 
   // limited by caps.
   //--------------------------------------------------------------------
-  if (!myFaces.IsEmpty()) {
+  if (!myFaces.IsEmpty())
+  {
     TopoDS_Solid    Res;
     TopExp_Explorer exp;
     BRep_Builder    B;
@@ -827,7 +823,8 @@ void BRepOffset_MakeOffset::MakeThickSolid()
     B.MakeSolid(Res);
 
     BRepTools_Quilt Glue;
-    for (exp.Init(myShape,TopAbs_FACE); exp.More(); exp.Next()) {
+    for (exp.Init(myShape,TopAbs_FACE); exp.More(); exp.Next())
+    {
       NbF++;
       Glue.Add (exp.Current());
     } 
@@ -856,11 +853,13 @@ void BRepOffset_MakeOffset::MakeThickSolid()
     if (YaResult == 0)
       {
       myDone = Standard_False;
+      myError = BRepOffset_UnknownError;
       return;
       }
 
     myOffsetShape = Glue.Shells();
-    for (exp.Init(myOffsetShape,TopAbs_SHELL); exp.More(); exp.Next()) {
+    for (exp.Init(myOffsetShape,TopAbs_SHELL); exp.More(); exp.Next())
+    {
       B.Add(Res,exp.Current());
     }
     Res.Closed(Standard_True);
@@ -868,18 +867,20 @@ void BRepOffset_MakeOffset::MakeThickSolid()
 
     // Test of Validity of the result of thick Solid 
     // more face than the initial solid.
-        
     Standard_Integer NbOF = 0;
-    for (exp.Init(myOffsetShape,TopAbs_FACE);exp.More(); exp.Next()) {
+    for (exp.Init(myOffsetShape,TopAbs_FACE);exp.More(); exp.Next())
+    {
       NbOF++;
     }
-    if (NbOF <= NbF) {
+    if (NbOF <= NbF)
+    {
       myDone = Standard_False;
+      myError = BRepOffset_UnknownError;
       return;
     }
   }
 
-  if (myOffset > 0 ) myOffsetShape.Reverse();  
+  if (myOffset > 0 ) myOffsetShape.Reverse();
 
   myDone = Standard_True;
 }
@@ -3466,3 +3467,172 @@ void CorrectSolid(TopoDS_Solid& theSol, TopTools_ListOfShape& theSolList)
   }
   theSol = aNewSol;
 }
+
+//=======================================================================
+//function : CheckInputData
+//purpose  : Check input data for possiblity of offset perform.
+//=======================================================================
+Standard_Boolean BRepOffset_MakeOffset::CheckInputData()
+{
+  // Set initial error state.
+  myError = BRepOffset_NoError;
+  TopoDS_Shape aTmpShape;
+  myBadShape = aTmpShape;
+
+  // Non-null offset.
+  if (Abs(myOffset) <= myTol)
+  {
+    Standard_Boolean isFound = Standard_False;
+    TopTools_DataMapIteratorOfDataMapOfShapeReal anIter(myFaceOffset);
+    for( ; anIter.More(); anIter.Next())
+    {
+      if (Abs(anIter.Value()) > myTol)
+      {
+        isFound = Standard_True;
+        break;
+      }
+    }
+
+    if (!isFound)
+    {
+      // No face with non-null offset found.
+      myError = BRepOffset_NullOffset;
+      return Standard_False;
+    }
+  }
+
+  // Connectivity of input shape.
+  if (!IsConnectedShell(myShape))
+  {
+    myError = BRepOffset_NotConnectedShell;
+    return Standard_False;
+  }
+
+  // Normals check and continuity check.
+  const Standard_Integer aPntPerDim = 20; // 21 points on each dimension.
+  Standard_Real aUmin, aUmax, aVmin, aVmax;
+  TopExp_Explorer anExpSF(myShape, TopAbs_FACE);
+  NCollection_Map<Handle(TopoDS_TShape)> aPresenceMap;
+  TopLoc_Location L;
+  gp_Pnt2d aPnt2d;
+  for( ; anExpSF.More(); anExpSF.Next())
+  {
+    const TopoDS_Face& aF = TopoDS::Face(anExpSF.Current());
+
+    if (aPresenceMap.Contains(aF.TShape()))
+    {
+      // Not perform computations with partner shapes,
+      // since they are contain same geometry.
+      continue;
+    }
+    aPresenceMap.Add(aF.TShape());
+
+    const Handle(Geom_Surface)& aSurf = BRep_Tool::Surface(aF, L);
+    BRepTools::UVBounds(aF, aUmin, aUmax, aVmin, aVmax);
+
+    // Continuity check.
+    if (aSurf->Continuity() == GeomAbs_C0)
+    {
+      myError = BRepOffset_C0Geometry;
+      return Standard_False;
+    }
+
+    // Get degenerated points, to avoid check them.
+    NCollection_Vector<gp_Pnt> aBad3dPnts;
+    TopExp_Explorer anExpFE(aF, TopAbs_EDGE);
+    for( ; anExpFE.More(); anExpFE.Next())
+    {
+      const TopoDS_Edge &aE = TopoDS::Edge(anExpFE.Current());
+      if (BRep_Tool::Degenerated(aE))
+      {
+        aBad3dPnts.Append(BRep_Tool::Pnt((TopExp::FirstVertex(aE))));
+      }
+    }
+
+    // Geometry grid check.
+    for(Standard_Integer i = 0; i <= aPntPerDim; i++)
+    {
+      Standard_Real aUParam = aUmin + (aUmax - aUmin) * i / aPntPerDim;
+      for(Standard_Integer j = 0; j <= aPntPerDim; j++)
+      {
+        Standard_Real aVParam = aVmin + (aVmax - aVmin) * j / aPntPerDim;
+
+        myError = checkSinglePoint(aUParam, aVParam, aSurf, aBad3dPnts);
+        if (myError != BRepOffset_NoError)
+          return Standard_False;
+      }
+    }
+
+    // Vertex list check.
+    TopExp_Explorer anExpFV(aF, TopAbs_VERTEX);
+    for( ; anExpFV.More(); anExpFV.Next())
+    {
+      const TopoDS_Vertex &aV = TopoDS::Vertex(anExpFV.Current());
+      aPnt2d = BRep_Tool::Parameters(aV, aF);
+
+      myError = checkSinglePoint(aPnt2d.X(), aPnt2d.Y(), aSurf, aBad3dPnts);
+      if (myError != BRepOffset_NoError)
+        return Standard_False;
+    }
+  }
+
+  return Standard_True;
+}
+
+
+//=======================================================================
+//function : GetBadShape
+//purpose  : Get shape where problems detected.
+//=======================================================================
+const TopoDS_Shape& BRepOffset_MakeOffset::GetBadShape() const
+{
+  return myBadShape;
+}
+
+
+//=======================================================================
+//function : checkSinglePoint
+//purpose  : Check single point on surface for bad normals
+//=======================================================================
+BRepOffset_Error checkSinglePoint(const Standard_Real theUParam,
+                                  const Standard_Real theVParam,
+                                  const Handle(Geom_Surface)& theSurf,
+                                  const NCollection_Vector<gp_Pnt>& theBadPoints)
+{
+  gp_Pnt aPnt;
+  gp_Vec aD1U, aD1V;
+  theSurf->D1(theUParam, theVParam, aPnt, aD1U, aD1V);
+
+  if (aD1U.SquareMagnitude() < Precision::SquareConfusion() ||
+      aD1V.SquareMagnitude() < Precision::SquareConfusion() )
+  {
+    Standard_Boolean isKnownBadPnt = Standard_False;
+    for(Standard_Integer anIdx  = theBadPoints.Lower();
+                         anIdx <= theBadPoints.Upper();
+                       ++anIdx)
+    {
+      if (aPnt.SquareDistance(theBadPoints(anIdx)) < Precision::SquareConfusion())
+      {
+        isKnownBadPnt = Standard_True;
+        break;
+      }
+    } // for(Standard_Integer anIdx  = theBadPoints.Lower();
+
+    if (!isKnownBadPnt)
+    {
+      return BRepOffset_BadNormalsOnGeometry;
+    }
+    else
+    {
+      return BRepOffset_NoError;
+    }
+  } //  if (aD1U.SquareMagnitude() < Precision::SquareConfusion() ||
+
+  if (aD1U.IsParallel(aD1V, Precision::Confusion()))
+  {
+    // Isolines are collinear.
+    return BRepOffset_BadNormalsOnGeometry;
+  }
+
+  return BRepOffset_NoError;
+}
index ece1577..c194998 100644 (file)
@@ -76,7 +76,7 @@ public:
   
   Standard_EXPORT const TopoDS_Shape& Shape() const;
   
-  //! returns information if IsDone() = FALSE.
+  //! returns information about offset state.
   Standard_EXPORT BRepOffset_Error Error() const;
   
   //! Returns <Image> containing links between initials
@@ -93,6 +93,18 @@ public:
   //! Returns the list of closing faces stores by AddFace
   Standard_EXPORT const TopTools_IndexedMapOfShape& ClosingFaces() const;
 
+  //! Makes pre analysis of possibility offset perform. Use method Error() to get more information.
+  //! Finds first error. List of checks:
+  //! 1) Check for existence object with non-null offset.
+  //! 2) Check for connectivity in offset shell.
+  //! 3) Check continuity of input surfaces.
+  //! 4) Check for normals existence on grid.
+  //! @return True if possible make computations and false otherwise.
+  Standard_EXPORT Standard_Boolean CheckInputData();
+
+  //! Return bad shape, which obtained in CheckInputData.
+  Standard_EXPORT const TopoDS_Shape& GetBadShape() const;
+
 
 
 
@@ -162,6 +174,7 @@ private:
   BRepOffset_Error myError;
   BRepOffset_MakeLoops myMakeLoops;
   Standard_Boolean myIsPerformSewing; // Handle bad walls in thicksolid mode.
+  TopoDS_Shape myBadShape;
 
 
 };
index 97acc21..bca729d 100644 (file)
@@ -340,7 +340,48 @@ static Standard_Integer CONTROL(Draw_Interpretor& theCommands,
   }
   return 0;
 }
-      
+
+//=======================================================================
+//function : reportOffsetState
+//purpose  : Print state of offset operation by error code.
+//=======================================================================
+static void reportOffsetState(Draw_Interpretor& theCommands,
+                              const BRepOffset_Error theErrorCode)
+{
+  switch(theErrorCode)
+  {
+  case BRepOffset_NoError:
+    {
+      theCommands << "OK. Offset performed succesfully.";
+      break;
+    }
+  case BRepOffset_BadNormalsOnGeometry:
+    {
+      theCommands << "ERROR. Degenerated normal on input data.";
+      break;
+    }
+  case BRepOffset_C0Geometry:
+    {
+      theCommands << "ERROR. C0 continuity of input data.";
+      break;
+    }
+  case BRepOffset_NullOffset:
+    {
+      theCommands << "ERROR. Null offset of all faces.";
+      break;
+    }
+  case BRepOffset_NotConnectedShell:
+    {
+      theCommands << "ERROR. Incorrect set of faces to remove, the remaining shell is not connected.";
+      break;
+    }
+  default:
+    {
+      theCommands << "ERROR. offsetperform operation not done.";
+      break;
+    }
+  }
+}
 
 //=======================================================================
 //function : PRW
@@ -801,13 +842,9 @@ static Standard_Integer SPLS(Draw_Interpretor& ,
 //function : thickshell
 //purpose  : 
 //=======================================================================
-
-Standard_Integer thickshell(Draw_Interpretor& ,
-                           Standard_Integer n, const char** a)
+Standard_Integer thickshell(Draw_Interpretor& theCommands,
+  Standard_Integer n, const char** a)
 {
-
-  //OSD_Chronometer Clock;
-  
   if ( n < 4) return 1;
   TopoDS_Shape  S  = DBRep::Get(a[2]);
   if (S.IsNull()) return 1;
@@ -816,13 +853,13 @@ Standard_Integer thickshell(Draw_Interpretor& ,
 
   GeomAbs_JoinType JT= GeomAbs_Arc;
   if (n > 4)
-    {
-      if (!strcmp(a[4],"i"))
-       JT = GeomAbs_Intersection;
-      if (!strcmp(a[4],"t"))
-       JT = GeomAbs_Tangent;
-    }
-  
+  {
+    if (!strcmp(a[4],"i"))
+      JT = GeomAbs_Intersection;
+    if (!strcmp(a[4],"t"))
+      JT = GeomAbs_Tangent;
+  }
+
   Standard_Boolean Inter = Standard_False; //Standard_True;
   Standard_Real    Tol = Precision::Confusion();
   if (n > 5)
@@ -831,15 +868,12 @@ Standard_Integer thickshell(Draw_Interpretor& ,
   BRepOffset_MakeOffset B;
   B.Initialize(S,Of,Tol,BRepOffset_Skin,Inter,0,JT, Standard_True);
 
-//  Clock.Start();
-
   B.MakeOffsetShape();
-  //B.MakeThickSolid ();
 
-//  Clock.Show();
+  const BRepOffset_Error aRetCode = B.Error();
+  reportOffsetState(theCommands, aRetCode);
 
   DBRep::Set(a[1],B.Shape());
-
   return 0;
 }
 
@@ -848,12 +882,9 @@ Standard_Integer thickshell(Draw_Interpretor& ,
 //purpose  : 
 //=======================================================================
 
-Standard_Integer offsetshape(Draw_Interpretor& ,
-                            Standard_Integer n, const char** a)
+Standard_Integer offsetshape(Draw_Interpretor& theCommands,
+                             Standard_Integer n, const char** a)
 {
-
-  //OSD_Chronometer Clock;
-  
   if ( n < 4) return 1;
   TopoDS_Shape  S  = DBRep::Get(a[2]);
   if (S.IsNull()) return 1;
@@ -861,7 +892,8 @@ Standard_Integer offsetshape(Draw_Interpretor& ,
   Standard_Real    Of    = Draw::Atof(a[3]);
   Standard_Boolean Inter = (!strcmp(a[0],"offsetcompshape"));
   GeomAbs_JoinType JT= GeomAbs_Arc;
-  if (!strcmp(a[0],"offsetinter")) {
+  if (!strcmp(a[0],"offsetinter"))
+  {
     JT    = GeomAbs_Intersection;
     Inter = Standard_True;
   }
@@ -869,9 +901,11 @@ Standard_Integer offsetshape(Draw_Interpretor& ,
   BRepOffset_MakeOffset B;
   Standard_Integer      IB  = 4;
   Standard_Real         Tol = Precision::Confusion();
-  if (n > 4) {
+  if (n > 4)
+  {
     TopoDS_Shape  SF  = DBRep::Get(a[4],TopAbs_FACE);
-    if (SF.IsNull()) {
+    if (SF.IsNull())
+    {
       IB  = 5;
       Tol = Draw::Atof(a[4]);
     }
@@ -882,19 +916,21 @@ Standard_Integer offsetshape(Draw_Interpretor& ,
   //----------------------------------------
   Standard_Boolean YaBouchon = Standard_False;
 
-  for (Standard_Integer i = IB ; i < n; i++) {
+  for (Standard_Integer i = IB ; i < n; i++)
+  {
     TopoDS_Shape  SF  = DBRep::Get(a[i],TopAbs_FACE);
-    if (!SF.IsNull()) {
+    if (!SF.IsNull())
+    {
       YaBouchon = Standard_True;
       B.AddFace(TopoDS::Face(SF));
     }
   }
 
-//  Clock.Start();
-
   if (!YaBouchon)  B.MakeOffsetShape();
   else             B.MakeThickSolid ();
-//  Clock.Show();
+
+  const BRepOffset_Error aRetCode = B.Error();
+  reportOffsetState(theCommands, aRetCode);
 
   DBRep::Set(a[1],B.Shape());
 
@@ -1031,8 +1067,8 @@ Standard_Integer offsetperform(Draw_Interpretor& theCommands,
     }
   else
     {
-    theCommands << "ERROR. offsetperform operation not done.";
-    return 1;
+      const BRepOffset_Error aRetCode = TheOffset.Error();
+      reportOffsetState(theCommands, aRetCode);
     }
 
   return 0;
index c52710d..998fdb1 100755 (executable)
@@ -1,5 +1,6 @@
-puts "TODO OCC25916 ALL: \\*\\* Exception"
-puts "TODO OCC25916 ALL: An exception was caught"
+puts "TODO OCC25916 ALL: ERROR. C0 continuity of input data."
+puts "TODO OCC26556 ALL: result is not a topological shape!!!"
+puts "TODO OCC26556 ALL: Error: object with name 'result' does not exist!"
 puts "TODO OCC25916 ALL: TEST INCOMPLETE"
 puts "========"
 puts "OCC21261"
index 40f2e61..248dfee 100755 (executable)
@@ -1,5 +1,6 @@
-puts "TODO OCC25916 ALL: \\*\\* Exception"
-puts "TODO OCC25916 ALL: An exception was caught"
+puts "TODO OCC25916 ALL: ERROR. Incorrect set of faces to remove, the remaining shell is not connected."
+puts "TODO OCC26556 ALL: result is not a topological shape!!!"
+puts "TODO OCC26556 ALL: Error: object with name 'result' does not exist!"
 puts "TODO OCC25916 ALL: TEST INCOMPLETE"
 puts "========"
 puts "OCC21261"
index 45c0cb1..cefcb91 100755 (executable)
@@ -1,4 +1,5 @@
 puts "TODO OCC23068 ALL: ERROR. offsetperform operation not done."
+puts "TODO OCC23068 ALL: result is not a topological shape!!!"
 puts "TODO OCC23068 ALL: TEST INCOMPLETE"
 
 puts "========================"
index 9acee07..f262fc1 100755 (executable)
@@ -1,3 +1,5 @@
+puts "TODO OCC26556 ALL: ERROR. offsetperform operation not done."
+
 puts "============"
 puts "OCC5805"
 puts "============"
index 85d9963..731cff9 100755 (executable)
@@ -1,5 +1,4 @@
 puts "TODO OCC25925 ALL: ERROR. offsetperform operation not done."
-puts "TODO OCC25925 ALL: Faulty OCC5805 : offsetshape is wrong"
 puts "TODO OCC25925 ALL: Tcl Exception:"
 puts "TODO OCC25925 ALL: TEST INCOMPLETE"
 
index b4033a9..eafe5fa 100755 (executable)
@@ -1,3 +1,4 @@
+puts "TODO OCC25925 ALL: ERROR. offsetperform operation not done."
 puts "============"
 puts "OCC5806"
 puts "============"
diff --git a/tests/bugs/modalg_6/bug26556_1 b/tests/bugs/modalg_6/bug26556_1
new file mode 100644 (file)
index 0000000..8fc7155
--- /dev/null
@@ -0,0 +1,18 @@
+puts "========"
+puts "OCC26556"
+puts "========"
+puts ""
+##################################################
+# Infinite calculations of BRepOffset_MakeOffset
+##################################################
+
+restore [locate_data_file OCC26556-004_extract_2015-01-C37_0216_res.brep] sh
+offsetparameter 1e-7 p i
+offsetload sh 300
+decho off
+set bug_info [offsetperform r]
+decho on
+
+if {$bug_info != "ERROR. Degenerated normal on input data."} {
+  puts "ERROR: OCC26556 is reproduced. Error message is absent."
+}
diff --git a/tests/bugs/modalg_6/bug26556_2 b/tests/bugs/modalg_6/bug26556_2
new file mode 100644 (file)
index 0000000..ca9077a
--- /dev/null
@@ -0,0 +1,18 @@
+puts "========"
+puts "OCC26556"
+puts "========"
+puts ""
+##################################################
+# Infinite calculations of BRepOffset_MakeOffset
+##################################################
+
+restore [locate_data_file OCC26556-004_extract_2015-01-C37_0240_res.brep] sh
+offsetparameter 1e-7 p i
+offsetload sh 400
+decho off
+set bug_info [offsetperform r]
+decho on
+
+if {$bug_info != "ERROR. Degenerated normal on input data."} {
+  puts "ERROR: OCC26556 is reproduced. Error message is absent."
+}
diff --git a/tests/bugs/modalg_6/bug26556_3 b/tests/bugs/modalg_6/bug26556_3
new file mode 100644 (file)
index 0000000..dd625dd
--- /dev/null
@@ -0,0 +1,18 @@
+puts "========"
+puts "OCC26556"
+puts "========"
+puts ""
+##################################################
+# Infinite calculations of BRepOffset_MakeOffset
+##################################################
+
+restore [locate_data_file OCC26556-004_extract_2015-01-C37_0213_res.brep] sh
+offsetparameter 1e-7 p i
+offsetload sh 80
+decho off
+set bug_info [offsetperform r]
+decho on
+
+if {$bug_info != "ERROR. Degenerated normal on input data."} {
+  puts "ERROR: OCC26556 is reproduced. Error message is absent."
+}
diff --git a/tests/bugs/modalg_6/bug26556_4 b/tests/bugs/modalg_6/bug26556_4
new file mode 100644 (file)
index 0000000..888a60a
--- /dev/null
@@ -0,0 +1,19 @@
+puts "========"
+puts "OCC26556"
+puts "========"
+puts ""
+##################################################
+# Infinite calculations of BRepOffset_MakeOffset
+##################################################
+
+restore [locate_data_file OCC26556-004_extract_2015-01-C37_0240_res.brep] sh
+explode sh F
+offsetparameter 1e-7 p i
+offsetload sh_3 300
+decho off
+set bug_info [offsetperform r]
+decho on
+
+if {$bug_info != "ERROR. Degenerated normal on input data."} {
+  puts "ERROR: OCC26556 is reproduced. Error message is absent."
+}
index 1b38f68..c451741 100644 (file)
@@ -1,6 +1,6 @@
-puts "TODO ?OCC23068 ALL: Error\\s*:\\s*The offset is not valid. The volume is"
-puts "TODO ?OCC23068 ALL: result is not a topological shape"
-puts "TODO ?OCC24156 ALL: TEST INCOMPLETE"
+puts "TODO ?OCC23068 ALL: ERROR. offsetperform operation not done."
+puts "TODO ?OCC23068 ALL: result is not a topological shape!!!"
+puts "TODO ?OCC23068 ALL: TEST INCOMPLETE"
 
 ## ======================================
 ## Grid    : CCV002
index 77aece9..f16e9e0 100755 (executable)
@@ -4,11 +4,8 @@
 ## Comment : From CV tests serie page 60
 ## ======================================
 
-#puts "*"
-#puts "TODO OCC22740 ALL: An exception was caught"
-#puts "TODO OCC22740 ALL: \\*\\* Exception \\*\\*"
-#puts "TODO OCC22740 ALL: Error : The offset cannot be built."
 puts "TODO OCC23524 ALL: Error : The offset is not valid"
+puts "TODO ?OCC26556 ALL: ERROR. offsetperform operation not done."
 
 restore [locate_data_file CCV_2_d1_gsw.rle] s
 explode s F
index 210e597..91edd57 100644 (file)
@@ -1,6 +1,6 @@
 #old file ofcb19
 puts "TODO CR25925 ALL: ERROR. offsetperform operation not done."
-puts "TODO CR25925 ALL: TEST INCOMPLETE"
+puts "TODO CR26556 ALL: Error : The offset cannot be built."
 
 restore [locate_data_file CHE_bb17.rle] s
 OFFSETSHAPE -0.04 {s_4 s_9 s_3 s_5 s_2 s_7 s_11} $calcul $type
index fa94080..518dea0 100644 (file)
@@ -1,6 +1,6 @@
 #old file ofcb23
 puts "TODO CR25925 ALL: ERROR. offsetperform operation not done."
-puts "TODO CR25925 ALL: TEST INCOMPLETE"
+puts "TODO CR26556 ALL: Error : The offset cannot be built."
 
 restore [locate_data_file CHE_cc3.rle] s
 OFFSETSHAPE -0.01 {s_6} $calcul $type
index 906605f..59e3639 100644 (file)
@@ -1,6 +1,6 @@
 #old file ofsb20
 puts "TODO CR25925 ALL: ERROR. offsetperform operation not done."
-puts "TODO CR25925 ALL: TEST INCOMPLETE"
+puts "TODO CR26556 ALL: Error : The offset cannot be built."
 
 restore [locate_data_file CHE_bb20.rle] s
 OFFSETSHAPE -0.1 {s_4 s_7} $calcul $type
index 3566dc6..c6d65c6 100644 (file)
@@ -1,5 +1,5 @@
 puts "TODO OCC23748 ALL: ERROR. offsetperform operation not done."
-puts "TODO OCC23748 ALL: TEST INCOMPLETE"
+puts "TODO OCC26556 ALL: Error : The offset cannot be built."
 pcone s 5 0 12 90
 trotate s 0 0 0 0 0 1 90
 
index 8e05374..c8cbadd 100644 (file)
@@ -1,5 +1,5 @@
 puts "TODO OCC23748 ALL: ERROR. offsetperform operation not done."
-puts "TODO OCC23748 ALL: TEST INCOMPLETE"
+puts "TODO OCC26556 ALL: Error : The offset cannot be built."
 
 pcone s 5 0 12 270
 
index 7654915..5363f0c 100644 (file)
@@ -1,5 +1,5 @@
 puts "TODO OCC23748 ALL: ERROR. offsetperform operation not done."
-puts "TODO OCC23748 ALL: TEST INCOMPLETE"
+puts "TODO OCC26556 ALL: Error : The offset cannot be built."
 
 pcone s 5 0 12 270
 
index 9f8353d..7d97464 100644 (file)
@@ -1,5 +1,5 @@
 puts "TODO OCC23748 ALL: ERROR. offsetperform operation not done."
-puts "TODO OCC23748 ALL: TEST INCOMPLETE"
+puts "TODO OCC26556 ALL: Error : The offset cannot be built."
 
 pcone s 5 0 12 270
 
index 89d3d8c..e9f27fd 100644 (file)
@@ -1,5 +1,5 @@
 puts "TODO OCC23748 ALL: ERROR. offsetperform operation not done."
-puts "TODO OCC23748 ALL: TEST INCOMPLETE"
+puts "TODO OCC26556 ALL: Error : The offset cannot be built."
 
 psphere s 15 -90 60 90
 trotate s 0 0 0 0 0 1 90
index 96d4e75..7525860 100644 (file)
@@ -1,5 +1,5 @@
 puts "TODO OCC23748 ALL: ERROR. offsetperform operation not done."
-puts "TODO OCC23748 ALL: TEST INCOMPLETE"
+puts "TODO OCC26556 ALL: Error : The offset cannot be built."
 
 psphere s 15 -90 60 270
 
index e0c5fa2..7b9d060 100644 (file)
@@ -1,5 +1,5 @@
 puts "TODO OCC23748 ALL: ERROR. offsetperform operation not done."
-puts "TODO OCC23748 ALL: TEST INCOMPLETE"
+puts "TODO OCC26556 ALL: Error : The offset cannot be built."
 
 psphere s 15 -90 60 270
 
index 8618d70..d5572a1 100644 (file)
@@ -1,5 +1,5 @@
 puts "TODO OCC23748 ALL: ERROR. offsetperform operation not done."
-puts "TODO OCC23748 ALL: TEST INCOMPLETE"
+puts "TODO OCC26556 ALL: Error : The offset cannot be built."
 
 psphere s 15 -90 60 270
 
index 7ecdbd8..9f5d0d7 100644 (file)
@@ -1,5 +1,5 @@
 puts "TODO OCC23748 ALL: ERROR. offsetperform operation not done."
-puts "TODO OCC23748 ALL: TEST INCOMPLETE"
+puts "TODO OCC26556 ALL: Error : The offset cannot be built."
 
 psphere s 15 90
 trotate s 0 0 0 0 0 1 90
index 338d877..9609133 100644 (file)
@@ -1,5 +1,5 @@
 puts "TODO OCC23748 ALL: ERROR. offsetperform operation not done."
-puts "TODO OCC23748 ALL: TEST INCOMPLETE"
+puts "TODO OCC26556 ALL: Error : The offset cannot be built."
 
 psphere s 15 270
 
index 5e7b678..ff784b5 100644 (file)
@@ -1,5 +1,5 @@
 puts "TODO OCC23748 ALL: ERROR. offsetperform operation not done."
-puts "TODO OCC23748 ALL: TEST INCOMPLETE"
+puts "TODO OCC26556 ALL: Error : The offset cannot be built."
 
 psphere s 15 270
 
index f09583d..1545993 100644 (file)
@@ -1,5 +1,5 @@
 puts "TODO OCC23748 ALL: ERROR. offsetperform operation not done."
-puts "TODO OCC23748 ALL: TEST INCOMPLETE"
+puts "TODO OCC26556 ALL: Error : The offset cannot be built."
 
 psphere s 15 270
 
index 51943b2..e57ede9 100755 (executable)
@@ -2,7 +2,7 @@ puts "TODO OCC24156 MacOS: \\*\\* Exception \\*\\*.*"
 puts "TODO OCC24156 MacOS: An exception was caught"
 puts "TODO OCC24156 MacOS: TEST INCOMPLETE"
 puts "TODO OCC23748 ALL: ERROR. offsetperform operation not done."
-puts "TODO OCC23748 ALL: TEST INCOMPLETE"
+puts "TODO OCC26556 ALL: Error : The offset cannot be built."
 
 ellipse w1 0 0 0 15 10
 mkedge w1 w1 0 pi/2
index a061911..2d4a927 100644 (file)
@@ -2,7 +2,7 @@ puts "TODO OCC24156 MacOS: \\*\\* Exception \\*\\*.*"
 puts "TODO OCC24156 MacOS: An exception was caught"
 puts "TODO OCC24156 MacOS: TEST INCOMPLETE"
 puts "TODO OCC23748 ALL: ERROR. offsetperform operation not done."
-puts "TODO OCC23748 ALL: TEST INCOMPLETE"
+puts "TODO OCC26556 ALL: Error : The offset cannot be built."
 
 ellipse w1 0 0 0 15 10
 mkedge w1 w1 0 pi/2
index 7332ff8..b2c36af 100644 (file)
@@ -2,7 +2,7 @@ puts "TODO OCC24156 MacOS: \\*\\* Exception \\*\\*.*"
 puts "TODO OCC24156 MacOS: An exception was caught"
 puts "TODO OCC24156 MacOS: TEST INCOMPLETE"
 puts "TODO OCC23748 ALL: ERROR. offsetperform operation not done."
-puts "TODO OCC23748 ALL: TEST INCOMPLETE"
+puts "TODO OCC26556 ALL: Error : The offset cannot be built."
 
 ellipse w1 0 0 0 15 10
 mkedge w1 w1 0 pi/2
index 453e541..8fc7ae1 100644 (file)
@@ -1,5 +1,5 @@
 puts "TODO OCC23748 ALL: ERROR. offsetperform operation not done."
-puts "TODO OCC23748 ALL: TEST INCOMPLETE"
+puts "TODO OCC26556 ALL: Error : The offset cannot be built."
 
 ellipse w1 0 0 0 15 10
 mkedge w1 w1 0 pi/2
index 123ef2f..6590cb9 100755 (executable)
@@ -2,7 +2,7 @@ puts "TODO OCC24156 MacOS: \\*\\* Exception \\*\\*.*"
 puts "TODO OCC24156 MacOS: An exception was caught"
 puts "TODO OCC24156 MacOS: TEST INCOMPLETE"
 puts "TODO OCC23748 ALL: ERROR. offsetperform operation not done."
-puts "TODO OCC23748 ALL: TEST INCOMPLETE"
+puts "TODO OCC26556 ALL: Error : The offset cannot be built."
 
 ellipse w1 0 0 0 15 10
 mkedge w1 w1 0 pi/2
index b26f0c9..e988509 100644 (file)
@@ -2,7 +2,7 @@ puts "TODO OCC24156 MacOS: \\*\\* Exception \\*\\*.*"
 puts "TODO OCC24156 MacOS: An exception was caught"
 puts "TODO OCC24156 MacOS: TEST INCOMPLETE"
 puts "TODO OCC23748 ALL: ERROR. offsetperform operation not done."
-puts "TODO OCC23748 ALL: TEST INCOMPLETE"
+puts "TODO OCC26556 ALL: Error : The offset cannot be built."
 
 cpulimit 400
 
index a30edba..66718bd 100644 (file)
@@ -2,7 +2,7 @@ puts "TODO OCC24156 MacOS: \\*\\* Exception \\*\\*.*"
 puts "TODO OCC24156 MacOS: An exception was caught"
 puts "TODO OCC24156 MacOS: TEST INCOMPLETE"
 puts "TODO OCC23748 ALL: ERROR. offsetperform operation not done."
-puts "TODO OCC23748 ALL: TEST INCOMPLETE"
+puts "TODO OCC26556 ALL: Error : The offset cannot be built."
 
 ellipse w1 0 0 0 15 10
 mkedge w1 w1 0 pi/2
index 9f6d43b..2bb88b0 100644 (file)
@@ -2,7 +2,7 @@ puts "TODO OCC24156 MacOS: \\*\\* Exception \\*\\*.*"
 puts "TODO OCC24156 MacOS: An exception was caught"
 puts "TODO OCC24156 MacOS: TEST INCOMPLETE"
 puts "TODO OCC23748 ALL: ERROR. offsetperform operation not done."
-puts "TODO OCC23748 ALL: TEST INCOMPLETE"
+puts "TODO OCC26556 ALL: Error : The offset cannot be built."
 
 # 17.01.2010
 cpulimit 600
index 4333bf9..dc23b60 100644 (file)
@@ -1,5 +1,5 @@
 puts "TODO OCC23748 ALL: ERROR. offsetperform operation not done."
-puts "TODO OCC23748 ALL: TEST INCOMPLETE"
+puts "TODO OCC26556 ALL: Error : The offset cannot be built."
 
 pcylinder s 5 10 270
 
index 32af578..8d4a62c 100644 (file)
@@ -1,5 +1,5 @@
 puts "TODO OCC23748 ALL: ERROR. offsetperform operation not done."
-puts "TODO OCC23748 ALL: TEST INCOMPLETE"
+puts "TODO OCC26556 ALL: Error : The offset cannot be built."
 
 pcone s 9 4 15 270
 
index 1392755..d6dea78 100644 (file)
@@ -1,5 +1,5 @@
 puts "TODO OCC23748 ALL: ERROR. offsetperform operation not done."
-puts "TODO OCC23748 ALL: TEST INCOMPLETE"
+puts "TODO OCC26556 ALL: Error : The offset cannot be built."
 
 pcone s 9 4 15 270
 
index dfc5677..e361f40 100644 (file)
@@ -1,5 +1,5 @@
 puts "TODO OCC23748 ALL: ERROR. offsetperform operation not done."
-puts "TODO OCC23748 ALL: TEST INCOMPLETE"
+puts "TODO OCC26556 ALL: Error : The offset cannot be built."
 
 ptorus s 10 10 0 45 270
 
index b03f64d..8e7c789 100644 (file)
@@ -1,5 +1,5 @@
 puts "TODO OCC23748 ALL: ERROR. offsetperform operation not done."
-puts "TODO OCC23748 ALL: TEST INCOMPLETE"
+puts "TODO OCC26556 ALL: Error : The offset cannot be built."
 
 circle w -20 0 0 20
 mkedge w w 0 pi*2/5
index 5aeb496..79a232c 100644 (file)
@@ -1,5 +1,5 @@
 puts "TODO OCC23748 ALL: ERROR. offsetperform operation not done."
-puts "TODO OCC23748 ALL: TEST INCOMPLETE"
+puts "TODO OCC26556 ALL: Error : The offset cannot be built."
 
 circle w -20 0 0 20
 mkedge w w 0 pi*2/5
index b3ac6ab..2c2eee4 100644 (file)
@@ -2,7 +2,7 @@ puts "TODO OCC24156 MacOS: \\*\\* Exception \\*\\*.*"
 puts "TODO OCC24156 MacOS: An exception was caught"
 puts "TODO OCC24156 MacOS: TEST INCOMPLETE"
 puts "TODO OCC23748 ALL: ERROR. offsetperform operation not done."
-puts "TODO OCC23748 ALL: TEST INCOMPLETE"
+puts "TODO OCC26556 ALL: Error : The offset cannot be built."
 
 beziersurf c 3 2 \
 0 0 0 0 5 5 2 14 3 \
index 77f204a..a85e234 100644 (file)
@@ -1,4 +1,5 @@
 puts "TODO OCC23068 ALL: Error : The offset is not valid"
+puts "TODO OCC26556 ALL: ERROR. offsetperform operation not done."
 # Original bug : hkg60144
 # Date : 17Juillet98
 
index 4c9ee74..be2f2de 100644 (file)
@@ -1,5 +1,5 @@
-puts "TODO OCC23190 ALL: An exception was caugh.*Offset with no C1 Surface"
-puts "TODO OCC23190 ALL: \\*\\* Exception \\*\\*.*Offset with no C1 Surface"
+puts "TODO OCC23190 ALL: ERROR. C0 continuity of input data."
+puts "TODO OCC23190 ALL: result is not a topological shape!!!"
 puts "TODO OCC23068 ALL: TEST INCOMPLETE"
 # Original bug : hkg60144/pro15325
 # Date : 17Juillet98
index 4d94a3b..65f492c 100644 (file)
@@ -1,5 +1,5 @@
-puts "TODO OCC23190 ALL: An exception was caught.*Offset with no C1 Surface"
-puts "TODO OCC23190 ALL: \\*\\* Exception \\*\\*.*Offset with no C1 Surface"
+puts "TODO OCC23190 ALL: ERROR. C0 continuity of input data."
+puts "TODO OCC23190 ALL: result is not a topological shape!!!"
 puts "TODO OCC23068 ALL: TEST INCOMPLETE"
 # Original bug : cts21271
 # Date : 11Sept98