[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [12927] trunk/blender/source/blender/ blenkernel/intern/particle_system.c:

Brecht Van Lommel brechtvanlommel at pandora.be
Mon Dec 17 16:32:27 CET 2007


Revision: 12927
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12927
Author:   blendix
Date:     2007-12-17 16:32:27 +0100 (Mon, 17 Dec 2007)

Log Message:
-----------

Bugfix: with particle distribution based on orco's, there was no
correction for them being 'squashed' to the bounding box of the
object, gave weird artifacts with child particle distribution.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/particle_system.c

Modified: trunk/blender/source/blender/blenkernel/intern/particle_system.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/particle_system.c	2007-12-17 13:35:07 UTC (rev 12926)
+++ trunk/blender/source/blender/blenkernel/intern/particle_system.c	2007-12-17 15:32:27 UTC (rev 12927)
@@ -494,6 +494,7 @@
 			int w, maxw;
 
 			psys_particle_on_dm(ctx->ob,ctx->dm,from,pa->num,pa->num_dmcache,pa->fuv,pa->foffset,co1,0,0,0,orco1,0);
+			transform_mesh_orco_verts((Mesh*)ob->data, &orco1, 1, 1);
 			maxw = BLI_kdtree_find_n_nearest(ctx->tree,3,orco1,NULL,ptn);
 
 			for(w=0; w<maxw; w++){
@@ -633,6 +634,7 @@
 			do_seams= (part->flag&PART_CHILD_SEAMS && ctx->seams);
 
 			psys_particle_on_dm(ob,dm,cfrom,cpa->num,DMCACHE_ISCHILD,cpa->fuv,cpa->foffset,co1,nor1,0,0,orco1,ornor1);
+			transform_mesh_orco_verts((Mesh*)ob->data, &orco1, 1, 1);
 			maxw = BLI_kdtree_find_n_nearest(ctx->tree,(do_seams)?10:4,orco1,ornor1,ptn);
 
 			maxd=ptn[maxw-1].dist;
@@ -820,6 +822,7 @@
 
 			for(p=0,pa=psys->particles; p<totpart; p++,pa++){
 				psys_particle_on_dm(ob,dm,part->from,pa->num,pa->num_dmcache,pa->fuv,pa->foffset,co,nor,0,0,orco,ornor);
+				transform_mesh_orco_verts((Mesh*)ob->data, &orco, 1, 1);
 				BLI_kdtree_insert(tree, p, orco, ornor);
 			}
 
@@ -923,8 +926,10 @@
 			tree=BLI_kdtree_new(totvert);
 
 			for(p=0; p<totvert; p++){
-				if(orcodata)
+				if(orcodata) {
 					VECCOPY(co,orcodata[p])
+					transform_mesh_orco_verts((Mesh*)ob->data, &co, 1, 1);
+				}
 				else
 					VECCOPY(co,mv[p].co)
 				BLI_kdtree_insert(tree,p,co,NULL);
@@ -990,7 +995,8 @@
 
 	/* 2.1 */
 	if((part->flag&PART_EDISTR || children) && ELEM(from,PART_FROM_PARTICLE,PART_FROM_VERT)==0){
-		float totarea=0.0, *co1, *co2, *co3, *co4;
+		MVert *v1, *v2, *v3, *v4;
+		float totarea=0.0, co1[3], co2[3], co3[3], co4[3];
 		float (*orcodata)[3];
 		
 		orcodata= dm->getVertDataArray(dm, CD_ORCO);
@@ -999,21 +1005,31 @@
 			MFace *mf=dm->getFaceData(dm,i,CD_MFACE);
 
 			if(orcodata) {
-				co1= orcodata[mf->v1];
-				co2= orcodata[mf->v2];
-				co3= orcodata[mf->v3];
+				VECCOPY(co1, orcodata[mf->v1]);
+				VECCOPY(co2, orcodata[mf->v2]);
+				VECCOPY(co3, orcodata[mf->v3]);
+				transform_mesh_orco_verts((Mesh*)ob->data, &co1, 1, 1);
+				transform_mesh_orco_verts((Mesh*)ob->data, &co2, 1, 1);
+				transform_mesh_orco_verts((Mesh*)ob->data, &co3, 1, 1);
 			}
 			else {
-				co1= ((MVert*)dm->getVertData(dm,mf->v1,CD_MVERT))->co;
-				co2= ((MVert*)dm->getVertData(dm,mf->v2,CD_MVERT))->co;
-				co3= ((MVert*)dm->getVertData(dm,mf->v3,CD_MVERT))->co;
+				v1= (MVert*)dm->getVertData(dm,mf->v1,CD_MVERT);
+				v2= (MVert*)dm->getVertData(dm,mf->v2,CD_MVERT);
+				v3= (MVert*)dm->getVertData(dm,mf->v3,CD_MVERT);
+				VECCOPY(co1, v1->co);
+				VECCOPY(co2, v2->co);
+				VECCOPY(co3, v3->co);
 			}
 
 			if (mf->v4){
-				if(orcodata)
-					co4= orcodata[mf->v4];
-				else
-					co4= ((MVert*)dm->getVertData(dm,mf->v4,CD_MVERT))->co;
+				if(orcodata) {
+					VECCOPY(co4, orcodata[mf->v4]);
+					transform_mesh_orco_verts((Mesh*)ob->data, &co4, 1, 1);
+				}
+				else {
+					v4= (MVert*)dm->getVertData(dm,mf->v4,CD_MVERT);
+					VECCOPY(co4, v4->co);
+				}
 				cur= AreaQ3Dfl(co1, co2, co3, co4);
 			}
 			else





More information about the Bf-blender-cvs mailing list