[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [52699] trunk/blender/source/blender/bmesh /tools/bmesh_bevel.c: Bevel: fix crash bug 33362, when beveling one edge at valence 2 vertex.

Howard Trickey howard.trickey at gmail.com
Sat Dec 1 15:23:45 CET 2012


Revision: 52699
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=52699
Author:   howardt
Date:     2012-12-01 14:23:44 +0000 (Sat, 01 Dec 2012)
Log Message:
-----------
Bevel: fix crash bug 33362, when beveling one edge at valence 2 vertex.
That special case should have been tested before - the code was wrong
in about three different ways.

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	2012-12-01 13:56:34 UTC (rev 52698)
+++ trunk/blender/source/blender/bmesh/tools/bmesh_bevel.c	2012-12-01 14:23:44 UTC (rev 52699)
@@ -431,10 +431,10 @@
  * from eh's direction. */
 static void offset_in_plane(EdgeHalf *e, const float plane_no[3], int left, float r[3])
 {
-	float dir[3], no[3];
+	float dir[3], no[3], fdir[3];
 	BMVert *v;
 
-	v = e->is_rev ? e->e->v1 : e->e->v2;
+	v = e->is_rev ? e->e->v2 : e->e->v1;
 
 	sub_v3_v3v3(dir, BM_edge_other_vert(e->e, v)->co, v->co);
 	normalize_v3(dir);
@@ -449,11 +449,12 @@
 			no[1] = 1.0f;
 	}
 	if (left)
-		cross_v3_v3v3(r, no, dir);
+		cross_v3_v3v3(fdir, dir, no);
 	else
-		cross_v3_v3v3(r, dir, no);
-	normalize_v3(r);
-	mul_v3_fl(r, e->offset);
+		cross_v3_v3v3(fdir, no, dir);
+	normalize_v3(fdir);
+	copy_v3_v3(r, v->co);
+	madd_v3_v3fl(r, fdir, e->offset);
 }
 
 /* Calculate coordinates of a point a distance d from v on e->e and return it in slideco */
@@ -753,6 +754,7 @@
 		slide_dist(e->next, bv->v, e->offset, co);
 		v = add_new_bound_vert(mem_arena, vm, co);
 		v->efirst = v->elast = e->next;
+		e->next->leftv = e->next->rightv = v;
 		vm->mesh_kind = M_POLY;
 		return;
 	}
@@ -844,7 +846,6 @@
 	else {
 		vm->mesh_kind = M_ADJ;
 	}
-	/* TODO: if vm->count == 4 and bv->selcount == 4, use M_CROSS pattern */
 }
 
 /*




More information about the Bf-blender-cvs mailing list