[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [42579] branches/bmesh/blender/source/ blender/bmesh/operators/bevel.c: slight improvement to bevel, when using the edges to take the new vertex location into account, dont let the longer edge skew the new position.

Campbell Barton ideasman42 at gmail.com
Mon Dec 12 10:28:56 CET 2011


Revision: 42579
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=42579
Author:   campbellbarton
Date:     2011-12-12 09:28:46 +0000 (Mon, 12 Dec 2011)
Log Message:
-----------
slight improvement to bevel, when using the edges to take the new vertex location into account, dont let the longer edge skew the new position.

also include an new & improved vertex placement method but left commented for now.

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/bmesh/operators/bevel.c

Modified: branches/bmesh/blender/source/blender/bmesh/operators/bevel.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/operators/bevel.c	2011-12-12 09:09:01 UTC (rev 42578)
+++ branches/bmesh/blender/source/blender/bmesh/operators/bevel.c	2011-12-12 09:28:46 UTC (rev 42579)
@@ -80,14 +80,52 @@
 		sub_v3_v3v3(vec2, v4, v3);
 	}
 
-	/*simple percentage method */
-	add_v3_v3(vec1, vec2);
-	mul_v3_fl(vec1, fac * 0.5);
+	if (1) {
+		/*simple percentage method */
 
-	if (inv)
-		negate_v3(vec1);
-	
-	add_v3_v3v3(co, vec1, l->v->co);
+
+		/* not strictly necessary, balance vectors
+		 * so the longer edge doesn't skew the result,
+		 * gives nicer, move event output */
+		float medium= (normalize_v3(vec1) + normalize_v3(vec2)) / 2.0f;
+		mul_v3_fl(vec1, medium);
+		mul_v3_fl(vec2, medium);
+		/* done */
+
+
+		add_v3_v3(vec1, vec2);
+		mul_v3_fl(vec1, fac * 0.5);
+
+		if (inv)
+			negate_v3(vec1);
+
+		add_v3_v3v3(co, vec1, l->v->co);
+	}
+	else {
+		/* distance based */
+		float tvec[3];
+		float dist;
+
+		normalize_v3(vec1);
+		normalize_v3(vec2);
+
+		/* get the medium normalized direction */
+		add_v3_v3v3(tvec, vec1,vec2);
+		normalize_v3(tvec);
+
+		/* for angle calculation */
+		negate_v3(vec2);
+
+		dist= shell_angle_to_dist(angle_normalized_v3v3(vec1, vec2) * 0.5);
+
+		mul_v3_fl(tvec, fac * dist);
+
+		if (inv)
+			negate_v3(tvec);
+
+		add_v3_v3v3(co, tvec, l->v->co);
+
+	}
 }
 
 #define ETAG_SET(e, v, nv) (v) == (e)->v1 ? (etags[BM_GetIndex((e))].newv1 = (nv)) : (etags[BM_GetIndex((e))].newv2 = (nv))




More information about the Bf-blender-cvs mailing list