diff options
author | Campbell Barton <ideasman42@gmail.com> | 2012-11-17 01:25:11 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2012-11-17 01:25:11 +0400 |
commit | c3c14f862b552a1536c5f4deae7e68c14f1d6e92 (patch) | |
tree | 51c9a2c882150568b70f200fda710caee8ad1819 /source/blender/bmesh/operators/bmo_bevel.c | |
parent | 6de13de7ab6a8b625dedd8a46de2d6181328f7cf (diff) |
use quad-strip for filling even when no segments are being added, this gives quad-loops along the bevel whereas before it made ngons.
Diffstat (limited to 'source/blender/bmesh/operators/bmo_bevel.c')
-rw-r--r-- | source/blender/bmesh/operators/bmo_bevel.c | 39 |
1 files changed, 23 insertions, 16 deletions
diff --git a/source/blender/bmesh/operators/bmo_bevel.c b/source/blender/bmesh/operators/bmo_bevel.c index c76693d5347..3854bca5d44 100644 --- a/source/blender/bmesh/operators/bmo_bevel.c +++ b/source/blender/bmesh/operators/bmo_bevel.c @@ -92,7 +92,7 @@ typedef struct VMesh { M_NONE, /* no polygon mesh needed */ M_POLY, /* a simple polygon */ M_ADJ, /* "adjacent edges" mesh pattern */ - M_CROSS, /* "cross edges" mesh pattern */ +// M_CROSS, /* "cross edges" mesh pattern */ M_TRI_FAN, /* a simple polygon - fan filled */ M_QUAD_STRIP, /* a simple polygon - cut into paralelle strips */ } mesh_kind; @@ -745,6 +745,9 @@ static void build_boundary(MemArena *mem_arena, BevVert *bv) if (vm->count == 2 && bv->edgecount == 3) { vm->mesh_kind = M_NONE; } + else if (bv->selcount == 2) { + vm->mesh_kind = M_QUAD_STRIP; + } else if (efirst->seg == 1 || bv->selcount == 1) { if (vm->count == 3 && bv->selcount == 1) { vm->mesh_kind = M_TRI_FAN; @@ -754,12 +757,7 @@ static void build_boundary(MemArena *mem_arena, BevVert *bv) } } else { - if (bv->selcount == 2) { - vm->mesh_kind = M_QUAD_STRIP; - } - else { - vm->mesh_kind = M_ADJ; - } + vm->mesh_kind = M_ADJ; } /* TODO: if vm->count == 4 and bv->selcount == 4, use M_CROSS pattern */ } @@ -1219,7 +1217,7 @@ static void bevel_build_quadstrip(BMesh *bm, BevVert *bv) } /* turns out we don't need this, - * because of how BM_face_split works we always get the loop of the larger face */ + * because of how BM_face_split works we always get the loop of the next face */ #if 0 if (l_new->f->len < l_new->radial_next->f->len) { l_new = l_new->radial_next; @@ -1371,14 +1369,23 @@ static void build_vmesh(MemArena *mem_arena, BMesh *bm, BevVert *bv) copy_mesh_vert(vm, weld2->index, 0, ns - k, weld1->index, 0, k); } - if (vm->mesh_kind == M_ADJ) - bevel_build_rings(bm, bv); - else if (vm->mesh_kind == M_POLY) - bevel_build_poly(bm, bv); - else if (vm->mesh_kind == M_TRI_FAN) - bevel_build_trifan(bm, bv); - else if (vm->mesh_kind == M_QUAD_STRIP) - bevel_build_quadstrip(bm, bv); + switch (vm->mesh_kind) { + case M_NONE: + /* do nothing */ + break; + case M_POLY: + bevel_build_poly(bm, bv); + break; + case M_ADJ: + bevel_build_rings(bm, bv); + break; + case M_TRI_FAN: + bevel_build_trifan(bm, bv); + break; + case M_QUAD_STRIP: + bevel_build_quadstrip(bm, bv); + break; + } } /* |