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:
Diffstat (limited to 'source/blender/blenkernel/intern/mball.c')
-rw-r--r--source/blender/blenkernel/intern/mball.c47
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);