Salome HOME
0022177: [CEA 799] RemoveExtraEdges produces non valid faces
authorskv <skv@opencascade.com>
Wed, 10 Jul 2013 07:16:01 +0000 (07:16 +0000)
committerskv <skv@opencascade.com>
Wed, 10 Jul 2013 07:16:01 +0000 (07:16 +0000)
src/BlockFix/BlockFix_UnionEdges.cxx

index f57f6c05c4861f7f99a41398243709e5de113b58..31a9243841bd812776b969c89f3efa291f959f07 100644 (file)
@@ -388,6 +388,18 @@ static Standard_Boolean MergeEdges(const TopTools_SequenceOfShape& SeqEdges,
   }
 
   if (jSplit > 0) {
+    // This is closed contour. Check the last (it is first as well) vertex,
+    // as it becomes intermediate after reordering.
+    TopoDS_Edge   anEdge = TopoDS::Edge(aChain.Last());
+    TopoDS_Vertex aVtx   = sae.LastVertex(anEdge);
+
+    if (IsFixed(aVtx, theFace1, theMapVtxEdge1) ||
+        IsFixed(aVtx, theFace2, theMapVtxEdge2)) {
+      // This vertex should be kept. So we can't merge this contour.
+      MESSAGE ("Two edges on closed contour can't be merged.");
+      return Standard_False;
+    }
+
     // Reorder edges in the sequence to have jSplit-th edge last.
     for(j = 1; j <= jSplit; j++) {
       aChain.Append(aChain.First());