[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