[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [14883] trunk/blender/source/blender/ blenkernel/intern/mball.c: Fix in mball last May 15th causes a hang ( eternal loop) in mball.c,

Ton Roosendaal ton at blender.org
Sun May 18 15:57:49 CEST 2008


Revision: 14883
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=14883
Author:   ton
Date:     2008-05-18 15:57:47 +0200 (Sun, 18 May 2008)

Log Message:
-----------
Fix in mball last May 15th causes a hang (eternal loop) in mball.c,
a division by zero was not handled

(weird though, only shows in OSX PPC. no optimize, debug build.)

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/mball.c

Modified: trunk/blender/source/blender/blenkernel/intern/mball.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/mball.c	2008-05-18 13:01:52 UTC (rev 14882)
+++ trunk/blender/source/blender/blenkernel/intern/mball.c	2008-05-18 13:57:47 UTC (rev 14883)
@@ -1374,36 +1374,37 @@
 					nz = abs((out.z - in.z)/mbproc->size);
 					
 					MAXN = MAX3(nx,ny,nz);
+					if(MAXN!=0.0f) {
+						dx = (out.x - in.x)/MAXN;
+						dy = (out.y - in.y)/MAXN;
+						dz = (out.z - in.z)/MAXN;
 
-					dx = (out.x - in.x)/MAXN;
-					dy = (out.y - in.y)/MAXN;
-					dz = (out.z - in.z)/MAXN;
+						len = 0.0;
+						while(len<=max_len) {
+							workp.x += dx;
+							workp.y += dy;
+							workp.z += dz;
+							/* compute value of implicite function */
+							tmp_v = mbproc->function(workp.x, workp.y, workp.z);
+							/* add cube to the stack, when value of implicite function crosses zero value */
+							if((tmp_v<0.0 && workp_v>=0.0)||(tmp_v>0.0 && workp_v<=0.0)) {
 
-					len = 0.0;
-					while(len<=max_len) {
-						workp.x += dx;
-						workp.y += dy;
-						workp.z += dz;
-						/* compute value of implicite function */
-						tmp_v = mbproc->function(workp.x, workp.y, workp.z);
-						/* add cube to the stack, when value of implicite function crosses zero value */
-						if((tmp_v<0.0 && workp_v>=0.0)||(tmp_v>0.0 && workp_v<=0.0)) {
+								/* indexes of CUBE, which includes "first point" */
+								c_i= (int)floor(workp.x/mbproc->size);
+								c_j= (int)floor(workp.y/mbproc->size);
+								c_k= (int)floor(workp.z/mbproc->size);
+								
+								/* add CUBE (with indexes c_i, c_j, c_k) to the stack,
+								 * this cube includes found point of Implicit Surface */
+								if (ml->flag & MB_NEGATIVE)
+									add_cube(mbproc, c_i, c_j, c_k, 2);
+								else
+									add_cube(mbproc, c_i, c_j, c_k, 1);
+							}
+							len = sqrt((workp.x-in.x)*(workp.x-in.x) + (workp.y-in.y)*(workp.y-in.y) + (workp.z-in.z)*(workp.z-in.z));
+							workp_v = tmp_v;
 
-							/* indexes of CUBE, which includes "first point" */
-							c_i= (int)floor(workp.x/mbproc->size);
-							c_j= (int)floor(workp.y/mbproc->size);
-							c_k= (int)floor(workp.z/mbproc->size);
-							
-							/* add CUBE (with indexes c_i, c_j, c_k) to the stack,
-							 * this cube includes found point of Implicit Surface */
-							if (ml->flag & MB_NEGATIVE)
-								add_cube(mbproc, c_i, c_j, c_k, 2);
-							else
-								add_cube(mbproc, c_i, c_j, c_k, 1);
 						}
-						len = sqrt((workp.x-in.x)*(workp.x-in.x) + (workp.y-in.y)*(workp.y-in.y) + (workp.z-in.z)*(workp.z-in.z));
-						workp_v = tmp_v;
-
 					}
 				}
 			}





More information about the Bf-blender-cvs mailing list