[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [51738] branches/soc-2012-sushi/source/ blender/bmesh/operators/bmo_bevel.c: More fixes to bevel.

Howard Trickey howard.trickey at gmail.com
Mon Oct 29 17:27:09 CET 2012


Revision: 51738
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=51738
Author:   howardt
Date:     2012-10-29 16:27:09 +0000 (Mon, 29 Oct 2012)
Log Message:
-----------
More fixes to bevel.

Modified Paths:
--------------
    branches/soc-2012-sushi/source/blender/bmesh/operators/bmo_bevel.c

Modified: branches/soc-2012-sushi/source/blender/bmesh/operators/bmo_bevel.c
===================================================================
--- branches/soc-2012-sushi/source/blender/bmesh/operators/bmo_bevel.c	2012-10-29 16:26:18 UTC (rev 51737)
+++ branches/soc-2012-sushi/source/blender/bmesh/operators/bmo_bevel.c	2012-10-29 16:27:09 UTC (rev 51738)
@@ -616,20 +616,7 @@
 	e = efirst = next_bev(bv, NULL);
 	vm = bv->vmesh;
 
-	if (bv->edgecount == 1) {
-		/* special case: end of wire edge */
-		/* TODO: follow wire chain to find implied plane of bevel, if any */
-		offset_in_plane(e, NULL, TRUE, co);
-		v = add_new_bound_vert(vm, co);
-		v->efirst = v->elast = v->ebev = e;
-		e->leftv = v;
-		offset_in_plane(e, NULL, FALSE, co);
-		v = add_new_bound_vert(vm, co);
-		v->efirst = v->elast = e;
-		e->rightv = v;
-		vm->mesh_kind = M_NONE;
-		return;
-	}
+	BLI_assert(bv->edgecount >= 2);  /* since bevel edges incident to 2 faces */
 
 	if (bv->edgecount == 2 && bv->selcount == 1) {
 		/* special case: beveled edge meets non-beveled one at valence 2 vert */
@@ -648,6 +635,7 @@
 		v = add_new_bound_vert(vm, co);
 		v->efirst = v->elast = e->next;
 		vm->mesh_kind = M_POLY;
+		return;
 	}
 
 	lastd = e->offset;
@@ -723,7 +711,7 @@
 	} while (e != efirst);
 
 	BLI_assert(vm->count >= 2);
-	if (vm->count == 2)
+	if (vm->count == 2 && bv->edgecount == 3)
 		vm->mesh_kind = M_NONE;
 	else if (efirst->seg == 1 || bv->selcount < 3)
 		vm->mesh_kind = M_POLY;
@@ -1115,12 +1103,15 @@
 	int i, ntot, found_shared_face, ccw_test_sum;
 	int nsel = 0;
 
-	/* gather input selected edges */
+	/* Gather input selected edges.
+	 * Only bevel selected edges that have exactly two incident faces. */
 	BMO_ITER (bme, &siter, bm, op, "geom", BM_EDGE) {
 		if ((bme->v1 == v)|| (BM_edge_other_vert(bme, bme->v1) == v))
 		{
-			BMO_elem_flag_enable (bm, bme, EDGE_SELECTED);
-			nsel++;
+			if (BM_edge_face_count(bme) == 2) {
+				BMO_elem_flag_enable (bm, bme, EDGE_SELECTED);
+				nsel++;
+			}
 		}
 	}
 
@@ -1310,6 +1301,9 @@
 	EdgeHalf *e1, *e2;
 	int k, nseg, i1, i2;
 
+	if (BM_edge_face_count(bme) != 2)
+		return;
+
 	bv1 = find_bevvert(bp, bme->v1);
 	bv2 = find_bevvert(bp, bme->v2);
 
@@ -1486,7 +1480,8 @@
 		}
 
 		BMO_ITER (v, &siter, bm, op, "geom", BM_VERT) {
-			BM_vert_kill(bm, v);
+			if (find_bevvert(&bp, v))
+				BM_vert_kill(bm, v);
 		}
 		free_bevel_params(&bp);
 	}




More information about the Bf-blender-cvs mailing list