Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2012-11-17 01:25:11 +0400
committerCampbell Barton <ideasman42@gmail.com>2012-11-17 01:25:11 +0400
commitc3c14f862b552a1536c5f4deae7e68c14f1d6e92 (patch)
tree51c9a2c882150568b70f200fda710caee8ad1819 /source/blender/bmesh/operators/bmo_bevel.c
parent6de13de7ab6a8b625dedd8a46de2d6181328f7cf (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.c39
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;
+ }
}
/*