Revision: 30031
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=30031
Author:   blendix
Date:     2010-07-06 13:44:45 +0200 (Tue, 06 Jul 2010)

Log Message:
-----------
Revert revision 29735:

Fix #22051: crash when scaling parent metaball. Keep the constant resolution
for any motherball's scale.

This avoids running out of memory when scaling the metaball down, but there's
a reason it depends on this scaling, for example for instancing it's more
useful to have this. It also doesn't really solve the problem but only moves it,
it's still possible to run out of memory with different setups/scales.

Revision Links:
--------------
    
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=29735

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

Modified: trunk/blender/source/blender/blenkernel/BKE_mball.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_mball.h 2010-07-06 11:43:08 UTC 
(rev 30030)
+++ trunk/blender/source/blender/blenkernel/BKE_mball.h 2010-07-06 11:44:45 UTC 
(rev 30031)
@@ -97,7 +97,6 @@
        CENTERLIST **centers;           /* cube center hash table */
        CORNER **corners;                       /* corner value hash table */
        EDGELIST **edges;                       /* edge and vertex id hash 
table */
-       float scale[3];
 } PROCESS;
 
 /* dividing scene using octal tree makes polygonisation faster */

Modified: trunk/blender/source/blender/blenkernel/intern/mball.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/mball.c      2010-07-06 
11:43:08 UTC (rev 30030)
+++ trunk/blender/source/blender/blenkernel/intern/mball.c      2010-07-06 
11:44:45 UTC (rev 30031)
@@ -889,11 +889,11 @@
        c = (CORNER *) new_pgn_element(sizeof(CORNER));
 
        c->i = i; 
-       c->x = ((float)i-0.5f)*p->size/p->scale[0];
+       c->x = ((float)i-0.5f)*p->size;
        c->j = j; 
-       c->y = ((float)j-0.5f)*p->size/p->scale[1];
+       c->y = ((float)j-0.5f)*p->size;
        c->k = k; 
-       c->z = ((float)k-0.5f)*p->size/p->scale[2];
+       c->z = ((float)k-0.5f)*p->size;
        c->value = p->function(c->x, c->y, c->z);
        
        c->next = p->corners[index];
@@ -1422,9 +1422,9 @@
                                        workp_v = in_v;
                                        max_len = 
sqrt((out.x-in.x)*(out.x-in.x) + (out.y-in.y)*(out.y-in.y) + 
(out.z-in.z)*(out.z-in.z));
 
-                                       nx = abs((out.x - 
in.x)/mbproc->size*mbproc->scale[0]);
-                                       ny = abs((out.y - 
in.y)/mbproc->size*mbproc->scale[1]);
-                                       nz = abs((out.z - 
in.z)/mbproc->size*mbproc->scale[2]);
+                                       nx = abs((out.x - in.x)/mbproc->size);
+                                       ny = abs((out.y - in.y)/mbproc->size);
+                                       nz = abs((out.z - in.z)/mbproc->size);
                                        
                                        MAXN = MAX3(nx,ny,nz);
                                        if(MAXN!=0.0f) {
@@ -1443,9 +1443,9 @@
                                                        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*mbproc->scale[0]);
-                                                               c_j= 
(int)floor(workp.y/mbproc->size*mbproc->scale[1]);
-                                                               c_k= 
(int)floor(workp.z/mbproc->size*mbproc->scale[2]);
+                                                               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 */
@@ -2095,7 +2095,6 @@
        DispList *dl;
        int a, nr_cubes;
        float *ve, *no, totsize, width;
-       float smat[3][3];
 
        mb= ob->data;
 
@@ -2103,8 +2102,6 @@
        if(!(G.rendering) && (mb->flag==MB_UPDATE_NEVER)) return;
        if(G.moving && mb->flag==MB_UPDATE_FAST) return;
 
-       object_scale_to_mat3(ob, smat);
-
        curindex= totindex= 0;
        indices= 0;
        thresh= mb->thresh;
@@ -2145,7 +2142,6 @@
                width= mb->wiresize;
                if(G.moving && mb->flag==MB_UPDATE_HALFRES) width*= 2;
        }
-
        /* nr_cubes is just for safety, minimum is totsize */
        nr_cubes= (int)(0.5+totsize/width);
 
@@ -2156,11 +2152,6 @@
        mbproc.cubes= 0;
        mbproc.delta = width/(float)(RES*RES);
 
-       /* to keep constant resolution for any motherball scale */
-       mbproc.scale[0]= smat[0][0];
-       mbproc.scale[1]= smat[1][1];
-       mbproc.scale[2]= smat[2][2];
-
        polygonize(&mbproc, mb);
        
        MEM_freeN(mainb);


_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to