[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11875] branches/soc-2007-red_fox/source/ blender/blenkernel/intern: Two Bug fixes (set smooth and limit-by-angle)
Levi Schooley
redfox at hhofministries.org
Wed Aug 29 03:13:23 CEST 2007
Revision: 11875
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=11875
Author: red_fox
Date: 2007-08-29 03:13:22 +0200 (Wed, 29 Aug 2007)
Log Message:
-----------
Two Bug fixes (set smooth and limit-by-angle)
Just two tiny bug fixes.
1. "Set smooth" and other edge/face stuff is now propagated
across the bevel (no more solid faces when "set smooth" is
applied to a mesh with the bevel modifier).
2. Limit-by-angle (modifier option) was causing some strange
errors in certain circumstances. These should be eliminated now.
Levi
Modified Paths:
--------------
branches/soc-2007-red_fox/source/blender/blenkernel/intern/BME_conversions.c
branches/soc-2007-red_fox/source/blender/blenkernel/intern/BME_tools.c
Modified: branches/soc-2007-red_fox/source/blender/blenkernel/intern/BME_conversions.c
===================================================================
--- branches/soc-2007-red_fox/source/blender/blenkernel/intern/BME_conversions.c 2007-08-29 00:10:23 UTC (rev 11874)
+++ branches/soc-2007-red_fox/source/blender/blenkernel/intern/BME_conversions.c 2007-08-29 01:13:22 UTC (rev 11875)
@@ -76,6 +76,7 @@
eve= em->verts.first;
while(eve) {
v1 = BME_MV(bm,eve->co);
+ VECCOPY(v1->no,eve->no);
v1->flag = eve->f;
v1->h = eve->h;
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-29 00:10:23 UTC (rev 11874)
+++ branches/soc-2007-red_fox/source/blender/blenkernel/intern/BME_tools.c 2007-08-29 01:13:22 UTC (rev 11875)
@@ -576,7 +576,7 @@
BME_Loop *BME_bevel_edge(BME_Mesh *bm, BME_Loop *l, float value, int options, float *up_vec, BME_TransData_Head *td) {
BME_Vert *v1, *v2, *kv;
- BME_Loop *kl;
+ BME_Loop *kl, *nl;
BME_Edge *e;
BME_Poly *f;
float factor=1;
@@ -613,12 +613,12 @@
if (kv) {
l = l->next;
if (kl->v == kv) {
- BME_SFME(bm,kl->f,kl->prev->v,kl->next->v,NULL);
+ BME_split_face(bm,kl->f,kl->prev->v,kl->next->v,&nl,kl->prev->e);
BME_JFKE(bm,((BME_Loop*)kl->prev->radial.next->data)->f,kl->f,kl->prev->e);
BME_JEKV(bm,kl->e,kv);
}
else {
- BME_SFME(bm,kl->f,kl->next->next->v,kl->v,NULL);
+ BME_split_face(bm,kl->f,kl->next->next->v,kl->v,&nl,kl->next->e);
BME_JFKE(bm,((BME_Loop*)kl->next->radial.next->data)->f,kl->f,kl->next->e);
BME_JEKV(bm,kl->e,kv);
}
@@ -647,12 +647,12 @@
/* if we need to clean up geometry... */
if (kv) {
if (kl->v == kv) {
- BME_SFME(bm,kl->f,kl->prev->v,kl->next->v,NULL);
+ BME_split_face(bm,kl->f,kl->prev->v,kl->next->v,&nl,kl->prev->e);
BME_JFKE(bm,((BME_Loop*)kl->prev->radial.next->data)->f,kl->f,kl->prev->e);
BME_JEKV(bm,kl->e,kv);
}
else {
- BME_SFME(bm,kl->f,kl->next->next->v,kl->v,NULL);
+ BME_split_face(bm,kl->f,kl->next->next->v,kl->v,&nl,kl->next->e);
BME_JFKE(bm,((BME_Loop*)kl->next->radial.next->data)->f,kl->f,kl->next->e);
BME_JEKV(bm,kl->e,kv);
}
@@ -858,7 +858,7 @@
Normalize(vec3);
Normalize(vec4);
- return 180.0f - (float)acos(Inpf(vec3,vec4))*180.0f/3.141592653f;;
+ return Inpf(vec3,vec4);
}
/**
@@ -879,7 +879,7 @@
MDeformVert *dvert;
MDeformWeight *dw;
int i, len;
- float weight;
+ float weight, threshold;
/* vert pass */
for (v=bm->verts.first; v; v=v->next) {
@@ -947,6 +947,7 @@
}
/* edge pass */
+ threshold = (float)cos((angle + 0.00001) * M_PI / 180.0);
for (e=bm->edges.first; e; e=e->next) {
e->tflag1 = BME_BEVEL_ORIG;
weight = 0.0;
@@ -995,19 +996,22 @@
weight = e->bweight;
}
else if (options & BME_BEVEL_ANGLE) {
- float ang1, ang2;
- ang1 = BME_bevel_get_angle(bm,e,e->v1);
- ang2 = BME_bevel_get_angle(bm,e,e->v2);
- if (ang1 < 180 - angle) {
+ if (BME_bevel_get_angle(bm,e,e->v1) < threshold) {
e->tflag1 |= BME_BEVEL_BEVEL;
e->v1->tflag1 |= BME_BEVEL_BEVEL;
BME_bevel_add_vweight(td, bm, e->v1, 1.0, 1.0, options);
}
- if (ang2 < 180 - angle) {
+ else {
+ BME_bevel_add_vweight(td, bm, e->v1, 0.0, 1.0, options);
+ }
+ if (BME_bevel_get_angle(bm,e,e->v2) < threshold) {
e->tflag1 |= BME_BEVEL_BEVEL;
e->v2->tflag1 |= BME_BEVEL_BEVEL;
BME_bevel_add_vweight(td, bm, e->v2, 1.0, 1.0, options);
}
+ else {
+ BME_bevel_add_vweight(td, bm, e->v2, 0.0, 1.0, options);
+ }
}
else if ((options & BME_BEVEL_VWEIGHT) && (options & BME_BEVEL_VERT) == 0) {
if ((e->v1->tflag1 & BME_BEVEL_BEVEL) && (e->v2->tflag1 & BME_BEVEL_BEVEL)) {
More information about the Bf-blender-cvs
mailing list