diff options
Diffstat (limited to 'source/blender/blenkernel/intern/mball.c')
-rw-r--r-- | source/blender/blenkernel/intern/mball.c | 47 |
1 files changed, 24 insertions, 23 deletions
diff --git a/source/blender/blenkernel/intern/mball.c b/source/blender/blenkernel/intern/mball.c index 79205814ae7..74d56e81a87 100644 --- a/source/blender/blenkernel/intern/mball.c +++ b/source/blender/blenkernel/intern/mball.c @@ -50,7 +50,6 @@ #include "BLI_arithb.h" #include "BKE_utildefines.h" -#include "BKE_bad_level_calls.h" #include "BKE_global.h" #include "BKE_main.h" @@ -120,7 +119,7 @@ MetaBall *copy_mball(MetaBall *mb) mbn= copy_libblock(mb); - duplicatelist(&mbn->elems, &mb->elems); + BLI_duplicatelist(&mbn->elems, &mb->elems); mbn->mat= MEM_dupallocN(mb->mat); for(a=0; a<mbn->totcol; a++) { @@ -286,7 +285,7 @@ int is_basis_mball(Object *ob) * blended. MetaBalls with different basic name can't be * blended. */ -Object *find_basis_mball(Object *basis) +Object *find_basis_mball(Scene *scene, Object *basis) { Base *base; Object *ob,*bob= basis; @@ -297,18 +296,21 @@ Object *find_basis_mball(Object *basis) splitIDname(basis->id.name+2, basisname, &basisnr); totelem= 0; - next_object(0, 0, 0); - while(next_object(1, &base, &ob)) { + /* XXX recursion check, see scene.c, just too simple code this next_object() */ + if(F_ERROR==next_object(scene, 0, 0, 0)) + return NULL; + + while(next_object(scene, 1, &base, &ob)) { if (ob->type==OB_MBALL) { if(ob==bob){ + MetaBall *mb= ob->data; + /* if bob object is in edit mode, then dynamic list of all MetaElems * is stored in editelems */ - if(ob==G.obedit) ml= editelems.first; - /* keep track of linked data too! */ - else if(G.obedit && G.obedit->data==ob->data) ml= editelems.first; + if(mb->editelems) ml= mb->editelems->first; /* if bob object is in object mode */ - else ml= ((MetaBall*)ob->data)->elems.first; + else ml= mb->elems.first; } else{ splitIDname(ob->id.name+2, obname, &obnr); @@ -316,13 +318,13 @@ Object *find_basis_mball(Object *basis) /* object ob has to be in same "group" ... it means, that it has to have * same base of its name */ if(strcmp(obname, basisname)==0){ + MetaBall *mb= ob->data; + /* if object is in edit mode, then dynamic list of all MetaElems * is stored in editelems */ - if(ob==G.obedit) ml= editelems.first; - /* keep track of linked data too! */ - else if(bob==G.obedit && bob->data==ob->data) ml= editelems.first; - /* object is in object mode */ - else ml= ((MetaBall*)ob->data)->elems.first; + if(mb->editelems) ml= mb->editelems->first; + /* if bob object is in object mode */ + else ml= mb->elems.first; if(obnr<basisnr){ if(!(ob->flag & OB_FROMDUPLI)){ @@ -1452,7 +1454,7 @@ void polygonize(PROCESS *mbproc, MetaBall *mb) } } -float init_meta(Object *ob) /* return totsize */ +float init_meta(Scene *scene, Object *ob) /* return totsize */ { Base *base; Object *bob; @@ -1471,8 +1473,8 @@ float init_meta(Object *ob) /* return totsize */ /* make main array */ - next_object(0, 0, 0); - while(next_object(1, &base, &bob)) { + next_object(scene, 0, 0, 0); + while(next_object(scene, 1, &base, &bob)) { if(bob->type==OB_MBALL) { zero_size= 0; @@ -1482,8 +1484,7 @@ float init_meta(Object *ob) /* return totsize */ mat= imat= 0; mb= ob->data; - if(ob==G.obedit) ml= editelems.first; - else if(G.obedit && G.obedit->type==OB_MBALL && G.obedit->data==mb) ml= editelems.first; + if(mb->editelems) ml= mb->editelems->first; else ml= mb->elems.first; } else { @@ -1493,8 +1494,8 @@ float init_meta(Object *ob) /* return totsize */ splitIDname(bob->id.name+2, name, &nr); if( strcmp(obname, name)==0 ) { mb= bob->data; - if(G.obedit && G.obedit->type==OB_MBALL && G.obedit->data==mb) - ml= editelems.first; + + if(mb->editelems) ml= mb->editelems->first; else ml= mb->elems.first; } } @@ -2036,7 +2037,7 @@ void init_metaball_octal_tree(int depth) subdivide_metaball_octal_node(node, size[0], size[1], size[2], metaball_tree->depth); } -void metaball_polygonize(Object *ob) +void metaball_polygonize(Scene *scene, Object *ob) { PROCESS mbproc; MetaBall *mb; @@ -2059,7 +2060,7 @@ void metaball_polygonize(Object *ob) mainb= MEM_mallocN(sizeof(void *)*totelem, "mainb"); /* initialize all mainb (MetaElems) */ - totsize= init_meta(ob); + totsize= init_meta(scene, ob); if(metaball_tree){ free_metaball_octal_node(metaball_tree->first); |