]> OCCT Git - occt-copy.git/commitdiff
0029159: Sewing fail when using a maximum tolerance CR0_670_FixS
authorgka <gka@opencascade.com>
Mon, 12 Mar 2018 09:34:09 +0000 (12:34 +0300)
committergka <gka@opencascade.com>
Mon, 12 Mar 2018 09:53:39 +0000 (12:53 +0300)
Patch for OCCT670. Computed tolerance of the edge is set directly in the TEdge if value of computed maximal distance between 3D curve and curve on the surface less then tolerance of edge computed in the SameParameter method.

src/BRepBuilderAPI/BRepBuilderAPI_Sewing.cxx

index 61ae9ac514066cbc1a3f1647bb1d9d00cc0526f3..d63db49d8823fa88a776b9e3c5036dc20c9ce175 100644 (file)
 #include <BRepBuilderAPI_CellFilter.hxx>
 #include <BRepBuilderAPI_BndBoxTreeSelector.hxx>
 #include <NCollection_UBTreeFiller.hxx>
+#include <BRep_TEdge.hxx>
 
 //=======================================================================
 //function : SameRange
@@ -934,11 +935,25 @@ TopoDS_Edge BRepBuilderAPI_Sewing::SameParameterEdge(const TopoDS_Edge& edgeFirs
             if (dist > dist2) 
               dist2 = dist;
           }
-          maxTol = Max(sqrt(dist2), Precision::Confusion());
+          maxTol = Max(sqrt(dist2) * (1. + 1e-7), Precision::Confusion());
+          //maxTol = Max(sqrt(dist2), Precision::Confusion());
         }
       }
+     
       if(maxTol >= 0. && maxTol < tolReached)
+      {
+        if (tolReached > MaxTolerance())
+        {
+          // Set tolerance directly to overwrite too large tolerance
+          static_cast<BRep_TEdge*>(edge.TShape().operator->())->Tolerance(maxTol);
+        }
+        else
+        {
+          // just update tolerance with computed distance
         aBuilder.UpdateEdge(edge, maxTol);
+        }
+      }
+            
       aBuilder.SameParameter(edge,Standard_True);
     }
   }