[Bf-blender-cvs] [1de79c8] master: Fix T50003, Bevel makes non-manifold mesh.

Howard Trickey noreply at git.blender.org
Tue Dec 6 13:47:59 CET 2016


Commit: 1de79c896019c7fa20dee9dabb25a331463767d2
Author: Howard Trickey
Date:   Tue Dec 6 07:43:47 2016 -0500
Branches: master
https://developer.blender.org/rB1de79c896019c7fa20dee9dabb25a331463767d2

Fix T50003, Bevel makes non-manifold mesh.

Problem was setting prev/next faces for edges around
a vertex on valence-2 vertices.

===================================================================

M	source/blender/bmesh/tools/bmesh_bevel.c

===================================================================

diff --git a/source/blender/bmesh/tools/bmesh_bevel.c b/source/blender/bmesh/tools/bmesh_bevel.c
index 6c168bd..8340be8 100644
--- a/source/blender/bmesh/tools/bmesh_bevel.c
+++ b/source/blender/bmesh/tools/bmesh_bevel.c
@@ -3557,7 +3557,7 @@ static void find_bevel_edge_order(BMesh *bm, BevVert *bv, BMEdge *first_bme)
 {
 	BMEdge *bme, *bme2;
 	BMIter iter;
-	BMFace *f;
+	BMFace *f, *bestf;
 	EdgeHalf *e;
 	EdgeHalf *e2;
 	BMLoop *l;
@@ -3595,10 +3595,21 @@ static void find_bevel_edge_order(BMesh *bm, BevVert *bv, BMEdge *first_bme)
 		bme = e->e;
 		bme2 = e2->e;
 		BLI_assert(bme != NULL);
+		if (e->fnext != NULL || e2->fprev != NULL)
+			continue;
+		/* Which faces have successive loops that are for bme and bme2?
+		 * There could be more than one. E.g., in manifold ntot==2 case.
+		 * Prefer one that has loop in same direction as e. */
+		bestf = NULL;
 		BM_ITER_ELEM(l, &iter, bme, BM_LOOPS_OF_EDGE) {
 			f = l->f;
-			if ((l->prev->e == bme2 || l->next->e == bme2) && !e->fnext && !e2->fprev)
-				e->fnext = e2->fprev = f;
+			if ((l->prev->e == bme2 || l->next->e == bme2)) {
+				if (!bestf || l->v == bv->v)
+					bestf = f;
+			}
+			if (bestf) {
+				e->fnext = e2->fprev = bestf;
+			}
 		}
 	}
 }




More information about the Bf-blender-cvs mailing list