From: skv Date: Wed, 2 Dec 2015 12:20:33 +0000 (+0300) Subject: 0052994: Remove Extra Edges makes a shape invalid X-Git-Tag: V8_0_0a1~2 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=f83b8bcd3ab6ba688e94f4ff1a2b971ae949386d;p=modules%2Fgeom.git 0052994: Remove Extra Edges makes a shape invalid --- diff --git a/src/BlockFix/BlockFix_UnionEdges.cxx b/src/BlockFix/BlockFix_UnionEdges.cxx index 62a0307c5..4908e5455 100644 --- a/src/BlockFix/BlockFix_UnionEdges.cxx +++ b/src/BlockFix/BlockFix_UnionEdges.cxx @@ -161,7 +161,7 @@ static Standard_Boolean IsToMerge isSame = Standard_True; - for (; anIter1.More(); anIter1.Next()) { + for (; anIter1.More() && isSame; anIter1.Next()) { TopoDS_Face aFace1 = TopoDS::Face(anIter1.Value()); TopTools_ListIteratorOfListOfShape anIter2(aLst2); @@ -581,16 +581,24 @@ static Standard_Boolean MergeEdges(const TopTools_SequenceOfShape& SeqEdges, if (C.IsNull()) { // jfa for Mantis issue 0020228 if (PV1.Distance(PV2) > Precision::Confusion()) continue; - // closed chain - if (edge1.Orientation() == TopAbs_FORWARD) { - C = C1; - } else { - C = Handle(Geom_Circle)::DownCast(C1->Reversed()); + // closed chain. Make a closed circular edge starting from V1. + gp_Ax1 anAxis = C1->Axis(); + + if (edge1.Orientation() == TopAbs_REVERSED) { + anAxis.Reverse(); } + const gp_Pnt &aP0 = anAxis.Location(); + gp_Dir aDX(PV1.XYZ().Subtracted(aP0.XYZ())); + gp_Ax2 aNewAxis(aP0, anAxis.Direction(), aDX); + + C = new Geom_Circle(aNewAxis, C1->Radius()); + B.MakeEdge (E,C,Precision::Confusion()); B.Add(E,V1); B.Add(E,V2); + B.UpdateVertex(V1, 0., E, 0.); + B.UpdateVertex(V2, 2.*M_PI, E, 0.); } else { gp_Pnt P0 = C->Location();