[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [53647] trunk/blender/source/blender/bmesh /tools/bmesh_bevel.c: Fix bevel crash #33801, when first edge of a vertex is wire.
Howard Trickey
howard.trickey at gmail.com
Tue Jan 8 04:30:39 CET 2013
Revision: 53647
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=53647
Author: howardt
Date: 2013-01-08 03:30:31 +0000 (Tue, 08 Jan 2013)
Log Message:
-----------
Fix bevel crash #33801, when first edge of a vertex is wire.
Modified Paths:
--------------
trunk/blender/source/blender/bmesh/tools/bmesh_bevel.c
Modified: trunk/blender/source/blender/bmesh/tools/bmesh_bevel.c
===================================================================
--- trunk/blender/source/blender/bmesh/tools/bmesh_bevel.c 2013-01-08 02:20:05 UTC (rev 53646)
+++ trunk/blender/source/blender/bmesh/tools/bmesh_bevel.c 2013-01-08 03:30:31 UTC (rev 53647)
@@ -1499,7 +1499,7 @@
{
BMEdge *bme;
BevVert *bv;
- BMEdge *bme2, *unflagged_bme;
+ BMEdge *bme2, *unflagged_bme, *first_bme;
BMFace *f;
BMIter iter, iter2;
EdgeHalf *e;
@@ -1511,10 +1511,16 @@
* Only bevel selected edges that have exactly two incident faces.
*/
+ if (bp->vertex_only)
+ first_bme = v->e;
+ else
+ first_bme = NULL;
BM_ITER_ELEM (bme, &iter, v, BM_EDGES_OF_VERT) {
if (BM_elem_flag_test(bme, BM_ELEM_TAG) && !bp->vertex_only) {
BLI_assert(BM_edge_is_manifold(bme));
nsel++;
+ if (!first_bme)
+ first_bme = bme;
}
ntot++;
@@ -1543,7 +1549,8 @@
/* add edges to bv->edges in order that keeps adjacent edges sharing
* a face, if possible */
i = 0;
- bme = v->e;
+
+ bme = first_bme;
BM_BEVEL_EDGE_TAG_ENABLE(bme);
e = &bv->edges[0];
e->e = bme;
@@ -1557,6 +1564,8 @@
continue;
if (!unflagged_bme)
unflagged_bme = bme2;
+ if (!bme->l)
+ continue;
BM_ITER_ELEM (f, &iter2, bme2, BM_FACES_OF_EDGE) {
if (BM_face_edge_share_loop(f, bme)) {
found_shared_face = 1;
@@ -1591,7 +1600,7 @@
}
/* find wrap-around shared face */
BM_ITER_ELEM (f, &iter2, bme, BM_FACES_OF_EDGE) {
- if (BM_face_edge_share_loop(f, bv->edges[0].e)) {
+ if (bv->edges[0].e->l && BM_face_edge_share_loop(f, bv->edges[0].e)) {
if (bv->edges[0].fnext == f)
continue; /* if two shared faces, want the other one now */
bv->edges[ntot - 1].fnext = f;
More information about the Bf-blender-cvs
mailing list