[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