From 9a8d52d154315696c89f1d463e312fbc5534ac23 Mon Sep 17 00:00:00 2001 From: Fedor Chelnokov Date: Mon, 6 Apr 2026 13:30:21 +0300 Subject: [PATCH] cutMesh: regenerate fill plans to avoid multiple edges --- source/MRMesh/MRContoursCut.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/source/MRMesh/MRContoursCut.cpp b/source/MRMesh/MRContoursCut.cpp index 706043e80dc8..4f1b72ff9dba 100644 --- a/source/MRMesh/MRContoursCut.cpp +++ b/source/MRMesh/MRContoursCut.cpp @@ -1280,8 +1280,15 @@ CutMeshResult cutMesh( Mesh& mesh, const OneMeshContours& contours, const CutMes params.new2OldMap->reserve( expectedTotalTris ); for ( size_t i = 0; i < holeRepresentativeEdges.size(); ++i ) - executeTriangulateContourPlan( mesh, holeRepresentativeEdges[i], fillPlans[i], + { + // regenerate fill plan, if the execution of the old one (prepared before filling of other holes) + // leads to the appearance of multiple edges + if ( !isFillingMultipleEdgeFree( mesh.topology, fillPlans[i] ) ) + fillPlans[i] = getPlanarHoleFillPlan( mesh, holeRepresentativeEdges[i] ); + + executeTriangulateContourPlan( mesh, holeRepresentativeEdges[i], fillPlans[i], needOldFaces ? oldFaces[i] : FaceId{}, params.new2OldMap, params.new2oldEdgesMap ); + } assert( mesh.topology.faceSize() == expectedTotalTris ); if ( params.new2OldMap )