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-18 13:33:11 +0400
committerCampbell Barton <ideasman42@gmail.com>2012-11-18 13:33:11 +0400
commitfd9dac77d1d6de6ae6eea3ccc19099decfae665f (patch)
tree2c41ac308818992b27692f91359caf53bfb000b5 /source/blender
parentb72c1ac33cd03553e4529b39215ed7e168920ad5 (diff)
bevel now only takes manifold edges (so it doesnt need to check for them)
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/bmesh/operators/bmo_bevel.c15
-rw-r--r--source/blender/bmesh/tools/bmesh_bevel.c9
-rw-r--r--source/blender/modifiers/intern/MOD_bevel.c8
3 files changed, 19 insertions, 13 deletions
diff --git a/source/blender/bmesh/operators/bmo_bevel.c b/source/blender/bmesh/operators/bmo_bevel.c
index 9de15fb9c9c..049b923315b 100644
--- a/source/blender/bmesh/operators/bmo_bevel.c
+++ b/source/blender/bmesh/operators/bmo_bevel.c
@@ -32,20 +32,27 @@
void bmo_bevel_exec(BMesh *bm, BMOperator *op)
{
- BMOIter siter;
- BMVert *v;
-
const float offset = BMO_slot_float_get(op, "offset");
const int seg = BMO_slot_int_get(op, "segments");
if (offset > 0) {
+ BMOIter siter;
+ BMEdge *e;
+ BMVert *v;
+
/* first flush 'geom' into flags, this makes it possible to check connected data */
BM_mesh_elem_hflag_disable_all(bm, BM_VERT | BM_EDGE, BM_ELEM_TAG, FALSE);
- BMO_ITER (v, &siter, bm, op, "geom", BM_VERT | BM_EDGE) {
+ BMO_ITER (v, &siter, bm, op, "geom", BM_VERT) {
BM_elem_flag_enable(v, BM_ELEM_TAG);
}
+ BMO_ITER (e, &siter, bm, op, "geom", BM_EDGE) {
+ if (BM_edge_is_manifold(e)) {
+ BM_elem_flag_enable(e, BM_ELEM_TAG);
+ }
+ }
+
BM_mesh_bevel(bm, offset, seg);
}
}
diff --git a/source/blender/bmesh/tools/bmesh_bevel.c b/source/blender/bmesh/tools/bmesh_bevel.c
index 8020c404d5f..12a85ce34de 100644
--- a/source/blender/bmesh/tools/bmesh_bevel.c
+++ b/source/blender/bmesh/tools/bmesh_bevel.c
@@ -1414,12 +1414,8 @@ static void bevel_vert_construct(BMesh *bm, BevelParams *bp, BMVert *v)
BM_ITER_ELEM (bme, &iter, v, BM_EDGES_OF_VERT) {
if (BM_elem_flag_test(bme, BM_ELEM_TAG)) {
- if (BM_edge_is_manifold(bme)) {
- nsel++;
- }
- else {
- BM_elem_flag_disable(bme, BM_ELEM_TAG);
- }
+ BLI_assert(BM_edge_is_manifold(bme));
+ nsel++;
}
}
@@ -1672,6 +1668,7 @@ static void bevel_build_edge_polygons(BMesh *bm, BevelParams *bp, BMEdge *bme)
/**
* currently only bevels BM_ELEM_TAG'd verts and edges
+ * all tagged edges _must_ be manifold.
*/
void BM_mesh_bevel(BMesh *bm, const float offset, const float segments)
{
diff --git a/source/blender/modifiers/intern/MOD_bevel.c b/source/blender/modifiers/intern/MOD_bevel.c
index e01c555d89e..7a109c041b6 100644
--- a/source/blender/modifiers/intern/MOD_bevel.c
+++ b/source/blender/modifiers/intern/MOD_bevel.c
@@ -134,9 +134,11 @@ static DerivedMesh *applyModifier(ModifierData *md, struct Object *UNUSED(ob),
else {
/* crummy, is there a way just to operator on all? - campbell */
BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) {
- BM_elem_flag_enable(e, BM_ELEM_TAG);
- BM_elem_flag_enable(e->v1, BM_ELEM_TAG);
- BM_elem_flag_enable(e->v2, BM_ELEM_TAG);
+ if (BM_edge_is_manifold(e)) {
+ BM_elem_flag_enable(e, BM_ELEM_TAG);
+ BM_elem_flag_enable(e->v1, BM_ELEM_TAG);
+ BM_elem_flag_enable(e->v2, BM_ELEM_TAG);
+ }
}
}