[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