0025100: Self-intersection of surfaces with using GeomAPI_IntSS rises run-time check...
authornbv <nbv@opencascade.com>
Wed, 15 Oct 2014 06:41:17 +0000 (10:41 +0400)
committerbugmaster <bugmaster@opencascade.com>
Thu, 16 Oct 2014 11:58:19 +0000 (15:58 +0400)
1. Bug command added.
2. Dynamic array is used in place of static.

src/IntPatch/IntPatch_InterferencePolyhedron.cxx
src/QABugs/QABugs_19.cxx

index a28cd38..f81b906 100644 (file)
@@ -34,6 +34,8 @@
 #include <TColStd_ListIteratorOfListOfInteger.hxx>
 #include <Bnd_BoundSortBox.hxx>
 
+#include <NCollection_LocalArray.hxx>
+
 static const int Pourcent3[9] = {0, 1, 2, 0, 1, 2, 0, 1, 2};
 
 //=======================================================================
@@ -556,8 +558,8 @@ void IntPatch_InterferencePolyhedron::Intersect
       }
     }
     
+    NCollection_LocalArray <Standard_Integer> id(Max(nbpiOT, 4));
 
-    Standard_Integer id[4];
     Standard_Integer ideb=-1;
     Standard_Integer ifin=-2;
 
@@ -567,7 +569,7 @@ void IntPatch_InterferencePolyhedron::Intersect
 // two triangles :
 
       gp_XYZ dir=ONor^TNor;
-      Standard_Real d[4];
+      NCollection_LocalArray <Standard_Real> d(nbpiOT);
       Standard_Integer iPi, iPs;
       for (iPi=0; iPi<nbpiOT; iPi++) {
        d[iPi]=dir*piOT(iPi+1).Pnt().XYZ();
index 24dbedd..1dafb45 100755 (executable)
@@ -2884,6 +2884,43 @@ static Standard_Integer OCC7570 (Draw_Interpretor& di, Standard_Integer n, const
 
 /*****************************************************************************/
 
+#include <GeomAPI_IntSS.hxx>
+//=======================================================================
+//function : OCC25100
+//purpose  :
+//=======================================================================
+static Standard_Integer OCC25100 (Draw_Interpretor& di, Standard_Integer argc, const char ** argv)
+{
+  if (argc < 2)
+  {
+    di << "the method requires a shape name\n";
+    return 1;
+  }
+
+  TopoDS_Shape S = DBRep::Get(argv[1]);
+  if ( S.IsNull() )
+  {
+    di << "Shape is empty" << "\n";
+    return 1;
+  }
+  
+  TopExp_Explorer aFaceExp(S, TopAbs_FACE);
+  const Handle(Geom_Surface)& aSurf = BRep_Tool::Surface(TopoDS::Face(aFaceExp.Current()));
+
+  GeomAPI_IntSS anIntersector(aSurf, aSurf, Precision::Confusion());
+
+  if (!anIntersector.IsDone())
+  {
+    di << "Error. Intersection is not done\n";
+    return 1;
+  }
+
+  di << "Test complete\n";
+
+  return 0;
+}
+
+
 void QABugs::Commands_19(Draw_Interpretor& theCommands) {
   const char *group = "QABugs";
 
@@ -2940,5 +2977,6 @@ void QABugs::Commands_19(Draw_Interpretor& theCommands) {
   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);
+  theCommands.Add ("OCC25100", "OCC25100 shape", __FILE__, OCC25100, group);
   return;
 }