]> OCCT Git - occt-copy.git/commitdiff
0027078: Exception in ShapeFixIntersectionTool::UnionVertexes() CR27078_671
authorika <ika@opencascade.com>
Thu, 14 Jan 2016 13:16:59 +0000 (16:16 +0300)
committerika <ika@opencascade.com>
Thu, 14 Jan 2016 13:16:59 +0000 (16:16 +0300)
patch for 6.7.1 with changes from issue 27078:
  Add checks to avoid exceptions.
  Remove check for small 3D curve.

src/ShapeFix/ShapeFix_Edge.cxx
src/ShapeFix/ShapeFix_IntersectionTool.cxx

index d141b0c93cc5bafac505a72fd2082ab7f77074ea..cf423627cadf9a12f0e2d6259a6e0ad0eaddbb1c 100644 (file)
@@ -498,7 +498,7 @@ Standard_Boolean ShapeFix_Edge::FixAddPCurve (const TopoDS_Edge& edge,
     Standard_Real preci = ( prec >0. ? prec : BRep_Tool::Tolerance(edge) );
     Handle(Geom_Curve) c3d = BRep_Tool::Curve(edge, /*Loc,*/ First, Last);
     //  Handle(Geom_Curve) c3d = BRep_Tool::Curve(E, First, Last);
-    if (c3d.IsNull() || (Abs(Last-First) <Precision::PConfusion())) {
+    if (c3d.IsNull()) {
       myStatus |= ShapeExtend::EncodeStatus (ShapeExtend_FAIL1);
       return Standard_False;
     }
index 57df2f525e1cd3ceb12059db90231eba076caf2b..08f32b714c2d176e6e2f1fe7a0a28cd4cd82cc92 100644 (file)
@@ -474,28 +474,32 @@ Standard_Boolean ShapeFix_IntersectionTool::UnionVertexes(const Handle(ShapeExte
       if(V21F.IsSame(V2F)) {
         NewE = sbe.CopyReplaceVertices(edge21,V1F,V21L);
         //NewE = sbe.CopyReplaceVertices(edge21,V,V21L);
-        boxes.Bind(NewE,boxes.Find(edge21)); // update boxes
+        if (boxes.IsBound(edge21))
+          boxes.Bind(NewE,boxes.Find(edge21)); // update boxes
         myContext->Replace(edge21,NewE);
         sewd->Set(NewE,num21);
       }
       if(V21L.IsSame(V2F)) {
         NewE = sbe.CopyReplaceVertices(edge21,V21F,V1F);
         //NewE = sbe.CopyReplaceVertices(edge21,V21F,V);
-        boxes.Bind(NewE,boxes.Find(edge21)); // update boxes
+        if (boxes.IsBound(edge21))
+          boxes.Bind(NewE,boxes.Find(edge21)); // update boxes
         myContext->Replace(edge21,NewE);
         sewd->Set(NewE,num21);
       }
       if(V22F.IsSame(V2F)) {
         NewE = sbe.CopyReplaceVertices(edge22,V1F,V22L);
         //NewE = sbe.CopyReplaceVertices(edge22,V,V22L);
-        boxes.Bind(NewE,boxes.Find(edge22)); // update boxes
+        if (boxes.IsBound(edge22))
+          boxes.Bind(NewE,boxes.Find(edge22)); // update boxes
         myContext->Replace(edge22,NewE);
         sewd->Set(NewE,num22);
       }
       if(V22L.IsSame(V2F)) {
         NewE = sbe.CopyReplaceVertices(edge22,V22F,V1F);
         //NewE = sbe.CopyReplaceVertices(edge22,V22F,V);
-        boxes.Bind(NewE,boxes.Find(edge22)); // update boxes
+        if (boxes.IsBound(edge22))
+          boxes.Bind(NewE,boxes.Find(edge22)); // update boxes
         myContext->Replace(edge22,NewE);
         sewd->Set(NewE,num22);
       }
@@ -533,28 +537,32 @@ Standard_Boolean ShapeFix_IntersectionTool::UnionVertexes(const Handle(ShapeExte
       if(V21F.IsSame(V2L)) {
         NewE = sbe.CopyReplaceVertices(edge21,V1F,V21L);
         //NewE = sbe.CopyReplaceVertices(edge21,V,V21L);
-        boxes.Bind(NewE,boxes.Find(edge21)); // update boxes
+        if (boxes.IsBound(edge21))
+          boxes.Bind(NewE,boxes.Find(edge21)); // update boxes
         myContext->Replace(edge21,NewE);
         sewd->Set(NewE,num21);
       }
       if(V21L.IsSame(V2L)) {
         NewE = sbe.CopyReplaceVertices(edge21,V21F,V1F);
         //NewE = sbe.CopyReplaceVertices(edge21,V21F,V);
-        boxes.Bind(NewE,boxes.Find(edge21)); // update boxes
+        if (boxes.IsBound(edge21))
+          boxes.Bind(NewE,boxes.Find(edge21)); // update boxes
         myContext->Replace(edge21,NewE);
         sewd->Set(NewE,num21);
       }
       if(V22F.IsSame(V2L)) {
         NewE = sbe.CopyReplaceVertices(edge22,V1F,V22L);
         //NewE = sbe.CopyReplaceVertices(edge22,V,V22L);
-        boxes.Bind(NewE,boxes.Find(edge22)); // update boxes
+        if (boxes.IsBound(edge22))
+          boxes.Bind(NewE,boxes.Find(edge22)); // update boxes
         myContext->Replace(edge22,NewE);
         sewd->Set(NewE,num22);
       }
       if(V22L.IsSame(V2L)) {
         NewE = sbe.CopyReplaceVertices(edge22,V22F,V1F);
         //NewE = sbe.CopyReplaceVertices(edge22,V22F,V);
-        boxes.Bind(NewE,boxes.Find(edge22)); // update boxes
+        if (boxes.IsBound(edge22))
+          boxes.Bind(NewE,boxes.Find(edge22)); // update boxes
         myContext->Replace(edge22,NewE);
         sewd->Set(NewE,num22);
       }
@@ -591,28 +599,32 @@ Standard_Boolean ShapeFix_IntersectionTool::UnionVertexes(const Handle(ShapeExte
       if(V21F.IsSame(V2F)) {
         NewE = sbe.CopyReplaceVertices(edge21,V1L,V21L);
         //NewE = sbe.CopyReplaceVertices(edge21,V,V21L);
-        boxes.Bind(NewE,boxes.Find(edge21)); // update boxes
+        if (boxes.IsBound(edge21))
+          boxes.Bind(NewE,boxes.Find(edge21)); // update boxes
         myContext->Replace(edge21,NewE);
         sewd->Set(NewE,num21);
       }
       if(V21L.IsSame(V2F)) {
         NewE = sbe.CopyReplaceVertices(edge21,V21F,V1L);
         //NewE = sbe.CopyReplaceVertices(edge21,V21F,V);
-        boxes.Bind(NewE,boxes.Find(edge21)); // update boxes
+        if (boxes.IsBound(edge21))
+          boxes.Bind(NewE,boxes.Find(edge21)); // update boxes
         myContext->Replace(edge21,NewE);
         sewd->Set(NewE,num21);
       }
       if(V22F.IsSame(V2F)) {
         NewE = sbe.CopyReplaceVertices(edge22,V1L,V22L);
         //NewE = sbe.CopyReplaceVertices(edge22,V,V22L);
-        boxes.Bind(NewE,boxes.Find(edge22)); // update boxes
+        if (boxes.IsBound(edge22))
+          boxes.Bind(NewE,boxes.Find(edge22)); // update boxes
         myContext->Replace(edge22,NewE);
         sewd->Set(NewE,num22);
       }
       if(V22L.IsSame(V2F)) {
         NewE = sbe.CopyReplaceVertices(edge22,V22F,V1L);
         //NewE = sbe.CopyReplaceVertices(edge22,V22F,V);
-        boxes.Bind(NewE,boxes.Find(edge22)); // update boxes
+        if (boxes.IsBound(edge22))
+          boxes.Bind(NewE,boxes.Find(edge22)); // update boxes
         myContext->Replace(edge22,NewE);
         sewd->Set(NewE,num22);
       }
@@ -649,28 +661,32 @@ Standard_Boolean ShapeFix_IntersectionTool::UnionVertexes(const Handle(ShapeExte
       if(V21F.IsSame(V2L)) {
         NewE = sbe.CopyReplaceVertices(edge21,V1L,V21L);
         //NewE = sbe.CopyReplaceVertices(edge21,V,V21L);
-        boxes.Bind(NewE,boxes.Find(edge21)); // update boxes
+        if (boxes.IsBound(edge21))
+          boxes.Bind(NewE,boxes.Find(edge21)); // update boxes
         myContext->Replace(edge21,NewE);
         sewd->Set(NewE,num21);
       }
       if(V21L.IsSame(V2L)) {
         NewE = sbe.CopyReplaceVertices(edge21,V21F,V1L);
         //NewE = sbe.CopyReplaceVertices(edge21,V21F,V);
-        boxes.Bind(NewE,boxes.Find(edge21)); // update boxes
+        if (boxes.IsBound(edge21))
+          boxes.Bind(NewE,boxes.Find(edge21)); // update boxes
         myContext->Replace(edge21,NewE);
         sewd->Set(NewE,num21);
       }
       if(V22F.IsSame(V2L)) {
         NewE = sbe.CopyReplaceVertices(edge22,V1L,V22L);
         //NewE = sbe.CopyReplaceVertices(edge22,V,V22L);
-        boxes.Bind(NewE,boxes.Find(edge22)); // update boxes
+        if (boxes.IsBound(edge22))
+          boxes.Bind(NewE,boxes.Find(edge22)); // update boxes
         myContext->Replace(edge22,NewE);
         sewd->Set(NewE,num22);
       }
       if(V22L.IsSame(V2L)) {
         NewE = sbe.CopyReplaceVertices(edge22,V22F,V1L);
         //NewE = sbe.CopyReplaceVertices(edge22,V22F,V);
-        boxes.Bind(NewE,boxes.Find(edge22)); // update boxes
+        if (boxes.IsBound(edge22))
+          boxes.Bind(NewE,boxes.Find(edge22)); // update boxes
         myContext->Replace(edge22,NewE);
         sewd->Set(NewE,num22);
       }