[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11667] branches/soc-2007-red_fox/source/ blender/blenkernel/intern/BME_tools.c: Bevel max limits working *much* better.

Levi Schooley redfox at hhofministries.org
Sun Aug 19 04:40:10 CEST 2007


Revision: 11667
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=11667
Author:   red_fox
Date:     2007-08-19 04:39:59 +0200 (Sun, 19 Aug 2007)

Log Message:
-----------
Bevel max limits working *much* better.

This commit should fix the majority of "over-beveling" 
problems. I've still have problems setting limits on concave 
polys, though, so it's not perfect. Zero-length edges also 
still cause crazy stuff to happen.

Levi

Modified Paths:
--------------
    branches/soc-2007-red_fox/source/blender/blenkernel/intern/BME_tools.c

Modified: branches/soc-2007-red_fox/source/blender/blenkernel/intern/BME_tools.c
===================================================================
--- branches/soc-2007-red_fox/source/blender/blenkernel/intern/BME_tools.c	2007-08-19 01:56:31 UTC (rev 11666)
+++ branches/soc-2007-red_fox/source/blender/blenkernel/intern/BME_tools.c	2007-08-19 02:39:59 UTC (rev 11667)
@@ -413,7 +413,7 @@
 	BME_Vert *sv, *v2, *v3;
 	BME_Loop *lv1;
 	BME_Edge *ne, *e1, *e2;
-	float maxfactor, old_maxfactor, maxfactor2, scale, len, dis, vec1[3], vec2[3], t_up_vec[3];
+	float maxfactor, old_maxfactor, maxfactor2, tmp_max, scale, len, dis, vec1[3], vec2[3], t_up_vec[3];
 	int is_edge, forward, is_split_vert;
 
 	if (l == NULL) {
@@ -448,8 +448,8 @@
 		BME_assign_transdata(td, bm, sv, sv->co, sv->co, NULL, sv->co, 0, 0, -1, -1); /* quick default */
 		sv->tflag1 |= BME_BEVEL_BEVEL;
 		ne->tflag1 = BME_BEVEL_ORIG; /* mark edge as original, even though it isn't */
-		VECSUB(vec1,v1->co,v->co);
-		VECSUB(vec2,v2->co,v->co);
+		BME_bevel_get_vec(vec1,v1,v,td);
+		BME_bevel_get_vec(vec2,v2,v,td);
 		Crossf(t_up_vec,vec1,vec2);
 		Normalize(t_up_vec);
 		up_vec = t_up_vec;
@@ -497,32 +497,52 @@
 	vtd1 = BME_get_transdata(td, v);
 	vtd2 = BME_get_transdata(td,v1);
 
-	if (is_edge && vtd1->loc != NULL) {
-		maxfactor = vtd1->maxfactor;
+	if (vtd1->loc == NULL) {
+		/* this is a vert with data only for calculating initial weights */
+		scale = vtd1->weight/vtd1->factor;
 	}
 	else {
-		maxfactor = BME_bevel_project_vec(vec1,vec2,up_vec,forward,td);
+		/* interpolate scale (later) */
+		scale = vtd1->weight;
+		/* also, interpolate max (later) */
 	}
-	printf("%f\n", maxfactor);
 
-	if (vtd1->loc == NULL) {
-		/* this is a vert with data only for calculating initial weights */
-		scale = vtd1->weight/vtd1->factor;
-		maxfactor *= scale;
-		old_maxfactor = vtd->maxfactor;
+	/* we will set up max's here */
+	/* the test is a bit silly, but there's really no other way (for now) to
+	 * determine if this is the first recursion */
+	if (value > 0.5) {
+		maxfactor = scale*BME_bevel_project_vec(vec1,vec2,up_vec,forward,td);
+		if (is_split_vert) {
+			old_maxfactor = vtd->maxfactor;
+		}
+		else {
+			old_maxfactor = vtd1->maxfactor;
+		}
 		if (old_maxfactor > 0 && maxfactor > old_maxfactor) {
-			return sv; /* we won't be changing anything */
+			if (is_split_vert ) {
+				return sv; /* we won't be changing anything (previously split vert, and it's "smaller") */
+			}
+			maxfactor = old_maxfactor;
 		}
 		maxfactor2 = vtd2->maxfactor;
 		if (maxfactor2 < 0) maxfactor2 = 0;
-		vtd->max = vtd2->max = len/(maxfactor + maxfactor2);
+		tmp_max = len/(maxfactor + maxfactor2);
+		if (vtd1->max < 0 || tmp_max <= vtd1->max) {
+			vtd->max = vtd2->max = tmp_max;
+		}
+		else {
+			vtd->max = vtd1->max;
+		}
 	}
 	else {
-		/* interpolate (later) */
-		scale = vtd1->weight;
+		if (is_edge && vtd1->loc != NULL) {
+			maxfactor = vtd1->maxfactor;
+		}
+		else {
+			maxfactor = BME_bevel_project_vec(vec1,vec2,up_vec,forward,td);
+		}
 		maxfactor *= scale;
 		vtd->max = vtd1->max;
-		/* also, interpolate max (later) */
 	}
 
 	dis = (v1->tflag1 & BME_BEVEL_ORIG)? len/3 : len/2;





More information about the Bf-blender-cvs mailing list