Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2010-07-06 15:44:45 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2010-07-06 15:44:45 +0400
commit137e53064cf65b736347b75f2580d82fe63d17ca (patch)
treec82e428b3121765e635c0cebfd4408788f943778 /source/blender/blenkernel/intern/mball.c
parent8049f9066c68c98cfacbce0a2372cf45190b4804 (diff)
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.
Diffstat (limited to 'source/blender/blenkernel/intern/mball.c')
-rw-r--r--source/blender/blenkernel/intern/mball.c27
1 files changed, 9 insertions, 18 deletions
diff --git a/source/blender/blenkernel/intern/mball.c b/source/blender/blenkernel/intern/mball.c
index da9740a1486..a97bec670d6 100644
--- a/source/blender/blenkernel/intern/mball.c
+++ b/source/blender/blenkernel/intern/mball.c
@@ -889,11 +889,11 @@ CORNER *setcorner (PROCESS* p, int i, int j, int k)
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 @@ void find_first_points(PROCESS *mbproc, MetaBall *mb, int a)
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 @@ void find_first_points(PROCESS *mbproc, MetaBall *mb, int a)
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 @@ void metaball_polygonize(Scene *scene, Object *ob, ListBase *dispbase)
DispList *dl;
int a, nr_cubes;
float *ve, *no, totsize, width;
- float smat[3][3];
mb= ob->data;
@@ -2103,8 +2102,6 @@ void metaball_polygonize(Scene *scene, Object *ob, ListBase *dispbase)
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 @@ void metaball_polygonize(Scene *scene, Object *ob, ListBase *dispbase)
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 @@ void metaball_polygonize(Scene *scene, Object *ob, ListBase *dispbase)
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);