[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [29738] trunk/blender/source/blender/ blenkernel: Recalculate motherball when metaball is deleting

Sergey Sharybin g.ulairi at gmail.com
Sun Jun 27 14:45:09 CEST 2010


Revision: 29738
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=29738
Author:   nazgul
Date:     2010-06-27 14:45:09 +0200 (Sun, 27 Jun 2010)

Log Message:
-----------
Recalculate motherball when metaball is deleting

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

Modified: trunk/blender/source/blender/blenkernel/BKE_mball.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_mball.h	2010-06-27 11:37:34 UTC (rev 29737)
+++ trunk/blender/source/blender/blenkernel/BKE_mball.h	2010-06-27 12:45:09 UTC (rev 29738)
@@ -168,6 +168,7 @@
 void copy_mball_properties(struct Scene *scene, struct Object *active_object);
 struct Object *find_basis_mball(struct Scene *scene, struct Object *ob);
 int is_basis_mball(struct Object *ob);
+int is_mball_basis_for(struct Object *ob1, struct Object *ob2);
 void metaball_polygonize(struct Scene *scene, struct Object *ob);
 void calc_mballco(struct MetaElem *ml, float *vec);
 float densfunc(struct MetaElem *ball, float x, float y, float z);

Modified: trunk/blender/source/blender/blenkernel/intern/mball.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/mball.c	2010-06-27 11:37:34 UTC (rev 29737)
+++ trunk/blender/source/blender/blenkernel/intern/mball.c	2010-06-27 12:45:09 UTC (rev 29738)
@@ -275,6 +275,19 @@
 	return 1;
 }
 
+/* return nonzero if ob1 is a basis mball for ob */
+int is_mball_basis_for(Object *ob1, Object *ob2)
+{
+	int basis1nr, basis2nr;
+	char basis1name[32], basis2name[32];
+
+	splitIDname(ob1->id.name+2, basis1name, &basis1nr);
+	splitIDname(ob2->id.name+2, basis2name, &basis2nr);
+
+	if(!strcmp(basis1name, basis2name)) return is_basis_mball(ob1);
+	else return 0;
+}
+
 /* \brief copy some properties from object to other metaball object with same base name
  *
  * When some properties (wiresize, threshold, update flags) of metaball are changed, then this properties

Modified: trunk/blender/source/blender/blenkernel/intern/object.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/object.c	2010-06-27 11:37:34 UTC (rev 29737)
+++ trunk/blender/source/blender/blenkernel/intern/object.c	2010-06-27 12:45:09 UTC (rev 29738)
@@ -404,6 +404,9 @@
 				if(pchan->custom==ob)
 					pchan->custom= NULL;
 			}
+		} else if(ELEM(OB_MBALL, ob->type, obt->type)) {
+			if(is_mball_basis_for(obt, ob))
+				obt->recalc|= OB_RECALC_DATA;
 		}
 		
 		sca_remove_ob_poin(obt, ob);
@@ -536,13 +539,7 @@
 		}
 		tex= tex->id.next;
 	}
-	
-	/* mballs (scene==NULL when called from library.c) */
-	if(scene && ob->type==OB_MBALL) {
-		obt= find_basis_mball(scene, ob);
-		if(obt) freedisplist(&obt->disp);
-	}
-	
+
 	/* worlds */
 	wrld= G.main->world.first;
 	while(wrld) {





More information about the Bf-blender-cvs mailing list