]> OCCT Git - occt-copy.git/commitdiff
0022801: Boolean operations algorithm fails on two customer's shapes
authorJGV <>
Fri, 2 Dec 2011 14:40:23 +0000 (14:40 +0000)
committerbugmaster <bugmaster@opencascade.com>
Mon, 5 Mar 2012 15:31:19 +0000 (19:31 +0400)
src/ApproxInt/ApproxInt_MultiLine.gxx
src/IntTools/IntTools_Context.cxx

index cf35ed68dfeb0dda7f0f05644ee95b32333ea8ce..6f268d1752f803c998bab81208bde11af6b51c60 100755 (executable)
@@ -432,7 +432,7 @@ const {
   Standard_Real dsmin = ds*0.3;
   Standard_Real smax  = AC(High);
   
-  for(i=2,s=ds; (s<smax) ; i++,s+=ds) { 
+  for(i=2,s=ds; (s < smax && Indice <= High-1); i++,s+=ds) { 
     //----------------------------------------------------------
     //-- Recherche des indices des points                     --
     //-- Point           :    2       i       NbPnts-1        --
@@ -443,7 +443,13 @@ const {
       if(!HasBeenInserted) ResultPntOn2SLine->Add(myLine->Point(Indice));
       HasBeenInserted = Standard_False;
       Indice++;
+      if (Indice == High)
+        break;
     }
+    
+    if (Indice == High)
+      break;
+    
     if(!HasBeenInserted  && AC(Indice) <= s) { 
       ResultPntOn2SLine->Add(myLine->Point(Indice));
       HasBeenInserted = Standard_True;
@@ -485,7 +491,13 @@ const {
          //-- cout<<" Insertion du point :"<<Indice<<endl;
          HasBeenInserted = Standard_False;
          Indice++;
+          if (Indice == High)
+            break;
        }
+    
+        if (Indice == High)
+          break;
+    
        if(!HasBeenInserted  && AC(Indice) <= s) { 
          ResultPntOn2SLine->Add(myLine->Point(Indice));
          HasBeenInserted = Standard_True;
index 710c60a1a999fbdcc29c4b196832f5842a49e95a..6faa98fb01acec48b69f26758d3dcb7cd5057a95 100755 (executable)
   //
   anAdr=myProjPSMap.FindFromKey1(aF);
   if (!anAdr) {
-    Standard_Real Umin, Usup, Vmin, Vsup, anEpsT=1.e-12 ;
+    Standard_Real Umin, Usup, Vmin, Vsup;
+    Standard_Real anEpsT = Precision::PConfusion(); //1.e-12;
     BRepAdaptor_Surface aBAS;
     //
     const Handle(Geom_Surface)& aS=BRep_Tool::Surface(aF);