[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