[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