[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11761] branches/soc-2007-red_fox/source/ blender/blenkernel/intern/BME_tools.c: More math fixes

Levi Schooley redfox at hhofministries.org
Tue Aug 21 02:11:44 CEST 2007


Revision: 11761
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=11761
Author:   red_fox
Date:     2007-08-21 02:11:44 +0200 (Tue, 21 Aug 2007)

Log Message:
-----------
More math fixes

This time it was an issue with Projf() returning -INF because 
of a zero division, or something. This commit locks vectors 
down to zero length if they are close enough to it, and 
checks for zero length vectors before passing them to Projf().

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-20 23:38:39 UTC (rev 11760)
+++ branches/soc-2007-red_fox/source/blender/blenkernel/intern/BME_tools.c	2007-08-21 00:11:44 UTC (rev 11761)
@@ -366,10 +366,16 @@
 	 * the vector */
 	if (VecCompare(vtd1->org,vtd2->org,0.000001f)) {
 		VECSUB(vec,v2->co,v1->co);
+		if (VecLength(vec) < 0.000001f) {
+			VecMulf(vec,0);
+		}
 		return 0;
 	}
 	else {
 		VECSUB(vec,vtd2->org,vtd1->org);
+		if (VecLength(vec) < 0.000001f) {
+			VecMulf(vec,0);
+		}
 		return 1;
 	}
 }
@@ -738,8 +744,13 @@
 				else {
 					VECCOPY(vec2,vtd1->vec);
 					VecMulf(vec2,vtd1->factor);
-					Projf(vec2,vec2,vec1);
-					fac1 = VecLength(vec2)/value;
+					if (Inpf(vec1, vec1)) {
+						Projf(vec2,vec2,vec1);
+						fac1 = VecLength(vec2)/value;
+					}
+					else {
+						fac1 = 0;
+					}
 				}
 				if (vtd2->loc == NULL) {
 					fac2 = 0;
@@ -747,8 +758,13 @@
 				else {
 					VECCOPY(vec3,vtd2->vec);
 					VecMulf(vec3,vtd2->factor);
-					Projf(vec2,vec3,vec1);
-					fac2 = VecLength(vec2)/value;
+					if (Inpf(vec1, vec1)) {
+						Projf(vec2,vec3,vec1);
+						fac2 = VecLength(vec2)/value;
+					}
+					else {
+						fac2 = 0;
+					}
 				}
 				if (fac1 || fac2) {
 					tmp_max = VecLength(vec1)/(fac1 + fac2);
@@ -758,7 +774,7 @@
 				}
 			}
 		}
-		for (i=0,len=f->len; i<len; i++,l=l->next) {
+		for (i=0,len=f->len; i<len && max>0; i++,l=l->next) {
 			vtd1 = BME_get_transdata(td,l->v);
 			if (vtd1->max < 0 || max < vtd1->max) {
 				vtd1->max = max;





More information about the Bf-blender-cvs mailing list