From: ika Date: Thu, 14 Jan 2016 13:16:59 +0000 (+0300) Subject: 0027078: Exception in ShapeFixIntersectionTool::UnionVertexes() X-Git-Url: http://git.dev.opencascade.org/gitweb/?a=commitdiff_plain;h=92bf4bec92c2952a3d79773c3b619957ecf56dec;p=occt-copy.git 0027078: Exception in ShapeFixIntersectionTool::UnionVertexes() patch for 6.7.1 with changes from issue 27078: Add checks to avoid exceptions. Remove check for small 3D curve. --- diff --git a/src/ShapeFix/ShapeFix_Edge.cxx b/src/ShapeFix/ShapeFix_Edge.cxx index d141b0c93c..cf423627ca 100644 --- a/src/ShapeFix/ShapeFix_Edge.cxx +++ b/src/ShapeFix/ShapeFix_Edge.cxx @@ -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) 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); }