[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [14851] trunk/blender/source/blender/ blenkernel: Last bug fix of #10999.

Jiri Hnidek jiri.hnidek at tul.cz
Thu May 15 21:30:30 CEST 2008


Revision: 14851
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=14851
Author:   jiri
Date:     2008-05-15 21:30:30 +0200 (Thu, 15 May 2008)

Log Message:
-----------
Last bug fix of #10999. This should finaly work (tested by jesterking).

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	2008-05-15 14:44:39 UTC (rev 14850)
+++ trunk/blender/source/blender/blenkernel/BKE_mball.h	2008-05-15 19:30:30 UTC (rev 14851)
@@ -150,7 +150,7 @@
 void find_first_points(PROCESS *mbproc, struct MetaBall *mb, int a);
 
 void fill_metaball_octal_node(octal_node *node, struct MetaElem *ml, short i);
-void subdivide_metaball_octal_node(octal_node *node, float *size, short depth);
+void subdivide_metaball_octal_node(octal_node *node, float size_x, float size_y, float size_z, short depth);
 void free_metaball_octal_node(octal_node *node);
 void init_metaball_octal_tree(int depth);
 void polygonize(PROCESS *mbproc, struct MetaBall *mb);

Modified: trunk/blender/source/blender/blenkernel/intern/mball.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/mball.c	2008-05-15 14:44:39 UTC (rev 14850)
+++ trunk/blender/source/blender/blenkernel/intern/mball.c	2008-05-15 19:30:30 UTC (rev 14851)
@@ -1709,15 +1709,13 @@
  *  +------+------+
  *  
  */
-void subdivide_metaball_octal_node(octal_node *node, float *size, short depth)
+void subdivide_metaball_octal_node(octal_node *node, float size_x, float size_y, float size_z, short depth)
 {
 	MetaElem *ml;
 	ml_pointer *ml_p;
 	float x,y,z;
 	int a,i;
 
-	if(depth==0) return;
-
 	/* create new nodes */
 	for(a=0;a<8;a++){
 		node->nodes[a]= MEM_mallocN(sizeof(octal_node),"octal_node");
@@ -1731,45 +1729,71 @@
 		node->nodes[a]->pos= 0;
 	}
 
-	size[0]/=2; size[1]/=2; size[2]/=2;
+	size_x /= 2;
+	size_y /= 2;
+	size_z /= 2;
 	
 	/* center of node */
-	node->x= x= node->x_min + size[0];
-	node->y= y= node->y_min + size[1];
-	node->z= z= node->z_min + size[2];
+	node->x = x = node->x_min + size_x;
+	node->y = y = node->y_min + size_y;
+	node->z = z = node->z_min + size_z;
 
 	/* setting up of border points of new nodes */
-	node->nodes[0]->x_min= node->x_min;
-	node->nodes[0]->y_min= node->y_min;
-	node->nodes[0]->z_min= node->z_min;
+	node->nodes[0]->x_min = node->x_min;
+	node->nodes[0]->y_min = node->y_min;
+	node->nodes[0]->z_min = node->z_min;
+	node->nodes[0]->x = node->nodes[0]->x_min + size_x/2;
+	node->nodes[0]->y = node->nodes[0]->y_min + size_y/2;
+	node->nodes[0]->z = node->nodes[0]->z_min + size_z/2;
 	
-	node->nodes[1]->x_min= x;
-	node->nodes[1]->y_min= node->y_min;
-	node->nodes[1]->z_min= node->z_min;
+	node->nodes[1]->x_min = x;
+	node->nodes[1]->y_min = node->y_min;
+	node->nodes[1]->z_min = node->z_min;
+	node->nodes[1]->x = node->nodes[1]->x_min + size_x/2;
+	node->nodes[1]->y = node->nodes[1]->y_min + size_y/2;
+	node->nodes[1]->z = node->nodes[1]->z_min + size_z/2;
 
-	node->nodes[2]->x_min= x;
-	node->nodes[2]->y_min= y;
-	node->nodes[2]->z_min= node->z_min;
+	node->nodes[2]->x_min = x;
+	node->nodes[2]->y_min = y;
+	node->nodes[2]->z_min = node->z_min;
+	node->nodes[2]->x = node->nodes[2]->x_min + size_x/2;
+	node->nodes[2]->y = node->nodes[2]->y_min + size_y/2;
+	node->nodes[2]->z = node->nodes[2]->z_min + size_z/2;
 
-	node->nodes[3]->x_min= node->x_min;
-	node->nodes[3]->y_min= y;
-	node->nodes[3]->z_min= node->z_min;
+	node->nodes[3]->x_min = node->x_min;
+	node->nodes[3]->y_min = y;
+	node->nodes[3]->z_min = node->z_min;
+	node->nodes[3]->x = node->nodes[3]->x_min + size_x/2;
+	node->nodes[3]->y = node->nodes[3]->y_min + size_y/2;
+	node->nodes[3]->z = node->nodes[3]->z_min + size_z/2;
 
-	node->nodes[4]->x_min= node->x_min;
-	node->nodes[4]->y_min= node->y_min;
-	node->nodes[4]->z_min= z;
+	node->nodes[4]->x_min = node->x_min;
+	node->nodes[4]->y_min = node->y_min;
+	node->nodes[4]->z_min = z;
+	node->nodes[4]->x = node->nodes[4]->x_min + size_x/2;
+	node->nodes[4]->y = node->nodes[4]->y_min + size_y/2;
+	node->nodes[4]->z = node->nodes[4]->z_min + size_z/2;
 	
-	node->nodes[5]->x_min= x;
-	node->nodes[5]->y_min= node->y_min;
-	node->nodes[5]->z_min= z;
+	node->nodes[5]->x_min = x;
+	node->nodes[5]->y_min = node->y_min;
+	node->nodes[5]->z_min = z;
+	node->nodes[5]->x = node->nodes[5]->x_min + size_x/2;
+	node->nodes[5]->y = node->nodes[5]->y_min + size_y/2;
+	node->nodes[5]->z = node->nodes[5]->z_min + size_z/2;
 
-	node->nodes[6]->x_min= x;
-	node->nodes[6]->y_min= y;
-	node->nodes[6]->z_min= z;
+	node->nodes[6]->x_min = x;
+	node->nodes[6]->y_min = y;
+	node->nodes[6]->z_min = z;
+	node->nodes[6]->x = node->nodes[6]->x_min + size_x/2;
+	node->nodes[6]->y = node->nodes[6]->y_min + size_y/2;
+	node->nodes[6]->z = node->nodes[6]->z_min + size_z/2;
 
-	node->nodes[7]->x_min= node->x_min;
-	node->nodes[7]->y_min= y;
-	node->nodes[7]->z_min= z;
+	node->nodes[7]->x_min = node->x_min;
+	node->nodes[7]->y_min = y;
+	node->nodes[7]->z_min = z;
+	node->nodes[7]->x = node->nodes[7]->x_min + size_x/2;
+	node->nodes[7]->y = node->nodes[7]->y_min + size_y/2;
+	node->nodes[7]->z = node->nodes[7]->z_min + size_z/2;
 
 	ml_p= node->elems.first;
 	
@@ -1936,7 +1960,7 @@
 	if(depth>0){
 		for(a=0;a<8;a++){
 			if(node->nodes[a]->count > 0) /* if node is not empty, then it is subdivided */
-				subdivide_metaball_octal_node(node->nodes[a], size, depth);
+				subdivide_metaball_octal_node(node->nodes[a], size_x, size_y, size_z, depth);
 		}
 	}
 }
@@ -2008,7 +2032,7 @@
 	size[2]= node->z_max - node->z_min;
 
 	/* first node is subdivided recursively */
-	subdivide_metaball_octal_node(node, size, metaball_tree->depth);
+	subdivide_metaball_octal_node(node, size[0], size[1], size[2], metaball_tree->depth);
 }
 
 void metaball_polygonize(Object *ob)





More information about the Bf-blender-cvs mailing list