diff options
Diffstat (limited to 'source/blender/bmesh/tools/bmesh_bevel.c')
-rw-r--r-- | source/blender/bmesh/tools/bmesh_bevel.c | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/source/blender/bmesh/tools/bmesh_bevel.c b/source/blender/bmesh/tools/bmesh_bevel.c index adeb3fdc630..bb3fe129e0b 100644 --- a/source/blender/bmesh/tools/bmesh_bevel.c +++ b/source/blender/bmesh/tools/bmesh_bevel.c @@ -900,7 +900,12 @@ static void build_boundary(BevelParams *bp, BevVert *bv) BLI_assert(vm->count >= 2); if (bp->vertex_only) { - vm->mesh_kind = bp->seg > 1 ? M_ADJ_SUBDIV : M_POLY; + if (vm->count == 2) + vm->mesh_kind = M_NONE; + else if (bp->seg > 1) + vm->mesh_kind = M_ADJ_SUBDIV; + else + vm->mesh_kind = M_POLY; } else if (vm->count == 2 && bv->edgecount == 3) { vm->mesh_kind = M_NONE; @@ -1202,8 +1207,12 @@ static void bevel_build_rings(BMesh *bm, BevVert *bv) f = boundvert_rep_face(v); f2 = boundvert_rep_face(v->next); if (!v->any_seam) { - for (ring = 1; ring < ns2; ring++) - bev_merge_uvs(bm, mesh_vert(vm, i, ring, ns2)->v); + for (ring = 1; ring < ns2; ring++) { + BMVert *v_uv = mesh_vert(vm, i, ring, ns2)->v; + if (v_uv) { + bev_merge_uvs(bm, v_uv); + } + } } } while ((v = v->next) != vm->boundstart); if (!bv->any_seam) @@ -1962,7 +1971,7 @@ static void bevel_vert_construct(BMesh *bm, BevelParams *bp, BMVert *v) if (!first_bme) first_bme = v->e; - if ((nsel == 0 && !bp->vertex_only) || (ntot < 3 && bp->vertex_only)) { + if ((nsel == 0 && !bp->vertex_only) || (ntot < 2 && bp->vertex_only)) { /* signal this vert isn't being beveled */ BM_elem_flag_disable(v, BM_ELEM_TAG); return; @@ -2366,7 +2375,7 @@ void BM_mesh_bevel(BMesh *bm, const float offset, const float segments, const struct MDeformVert *dvert, const int vertex_group) { BMIter iter; - BMVert *v; + BMVert *v, *v_next; BMEdge *e; BevelParams bp = {NULL}; @@ -2380,7 +2389,7 @@ void BM_mesh_bevel(BMesh *bm, const float offset, const float segments, if (bp.offset > 0) { /* primary alloc */ bp.vert_hash = BLI_ghash_ptr_new(__func__); - bp.mem_arena = BLI_memarena_new((1 << 16), __func__); + bp.mem_arena = BLI_memarena_new(MEM_SIZE_OPTIMAL(1 << 16), __func__); BLI_memarena_use_calloc(bp.mem_arena); if (limit_offset) @@ -2409,7 +2418,7 @@ void BM_mesh_bevel(BMesh *bm, const float offset, const float segments, } } - BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { + BM_ITER_MESH_MUTABLE (v, v_next, &iter, bm, BM_VERTS_OF_MESH) { if (BM_elem_flag_test(v, BM_ELEM_TAG)) { BLI_assert(find_bevvert(&bp, v) != NULL); BM_vert_kill(bm, v); |