[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [53647] trunk/blender/source/blender/bmesh /tools/bmesh_bevel.c: Fix bevel crash #33801, when first edge of a vertex is wire.

Howard Trickey howard.trickey at gmail.com
Tue Jan 8 04:30:39 CET 2013


Revision: 53647
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=53647
Author:   howardt
Date:     2013-01-08 03:30:31 +0000 (Tue, 08 Jan 2013)
Log Message:
-----------
Fix bevel crash #33801, when first edge of a vertex is wire.

Modified Paths:
--------------
    trunk/blender/source/blender/bmesh/tools/bmesh_bevel.c

Modified: trunk/blender/source/blender/bmesh/tools/bmesh_bevel.c
===================================================================
--- trunk/blender/source/blender/bmesh/tools/bmesh_bevel.c	2013-01-08 02:20:05 UTC (rev 53646)
+++ trunk/blender/source/blender/bmesh/tools/bmesh_bevel.c	2013-01-08 03:30:31 UTC (rev 53647)
@@ -1499,7 +1499,7 @@
 {
 	BMEdge *bme;
 	BevVert *bv;
-	BMEdge *bme2, *unflagged_bme;
+	BMEdge *bme2, *unflagged_bme, *first_bme;
 	BMFace *f;
 	BMIter iter, iter2;
 	EdgeHalf *e;
@@ -1511,10 +1511,16 @@
 	 * Only bevel selected edges that have exactly two incident faces.
 	 */
 
+	if (bp->vertex_only)
+		first_bme = v->e;
+	else
+		first_bme = NULL;
 	BM_ITER_ELEM (bme, &iter, v, BM_EDGES_OF_VERT) {
 		if (BM_elem_flag_test(bme, BM_ELEM_TAG) && !bp->vertex_only) {
 			BLI_assert(BM_edge_is_manifold(bme));
 			nsel++;
+			if (!first_bme)
+				first_bme = bme;
 		}
 		ntot++;
 
@@ -1543,7 +1549,8 @@
 	/* add edges to bv->edges in order that keeps adjacent edges sharing
 	 * a face, if possible */
 	i = 0;
-	bme = v->e;
+
+	bme = first_bme;
 	BM_BEVEL_EDGE_TAG_ENABLE(bme);
 	e = &bv->edges[0];
 	e->e = bme;
@@ -1557,6 +1564,8 @@
 					continue;
 				if (!unflagged_bme)
 					unflagged_bme = bme2;
+				if (!bme->l)
+					continue;
 				BM_ITER_ELEM (f, &iter2, bme2, BM_FACES_OF_EDGE) {
 					if (BM_face_edge_share_loop(f, bme)) {
 						found_shared_face = 1;
@@ -1591,7 +1600,7 @@
 	}
 	/* find wrap-around shared face */
 	BM_ITER_ELEM (f, &iter2, bme, BM_FACES_OF_EDGE) {
-		if (BM_face_edge_share_loop(f, bv->edges[0].e)) {
+		if (bv->edges[0].e->l && BM_face_edge_share_loop(f, bv->edges[0].e)) {
 			if (bv->edges[0].fnext == f)
 				continue;   /* if two shared faces, want the other one now */
 			bv->edges[ntot - 1].fnext = f;




More information about the Bf-blender-cvs mailing list