[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [21372] branches/blender2.5/blender: Added a particle instance modifier option to use particle size.

Janne Karhu jhkarh at utu.fi
Sun Jul 5 14:36:20 CEST 2009


Revision: 21372
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21372
Author:   jhk
Date:     2009-07-05 14:36:20 +0200 (Sun, 05 Jul 2009)

Log Message:
-----------
Added a particle instance modifier option to use particle size.

Modified Paths:
--------------
    branches/blender2.5/blender/release/ui/buttons_data_modifier.py
    branches/blender2.5/blender/source/blender/blenkernel/intern/modifier.c
    branches/blender2.5/blender/source/blender/makesdna/DNA_modifier_types.h
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_modifier.c

Modified: branches/blender2.5/blender/release/ui/buttons_data_modifier.py
===================================================================
--- branches/blender2.5/blender/release/ui/buttons_data_modifier.py	2009-07-05 06:36:56 UTC (rev 21371)
+++ branches/blender2.5/blender/release/ui/buttons_data_modifier.py	2009-07-05 12:36:20 UTC (rev 21372)
@@ -299,12 +299,14 @@
 		col = layout.column_flow()
 		col.itemR(md, "normal")
 		col.itemR(md, "children")
+		col.itemR(md, "size")
 		col.itemR(md, "path")
 		if md.path:
 			col.itemR(md, "keep_shape")
 		col.itemR(md, "unborn")
 		col.itemR(md, "alive")
 		col.itemR(md, "dead")
+		col.itemL(md, "")
 		if md.path:
 			col.itemR(md, "axis", text="")
 		

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/modifier.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/modifier.c	2009-07-05 06:36:56 UTC (rev 21371)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/modifier.c	2009-07-05 12:36:20 UTC (rev 21372)
@@ -6477,6 +6477,7 @@
 	int i,totvert, totpart=0, totface, maxvert, maxface, first_particle=0;
 	short track=ob->trackflag%3, trackneg, axis = pimd->axis;
 	float max_co=0.0, min_co=0.0, temp_co[3], cross[3];
+	float *size=NULL;
 
 	trackneg=((ob->trackflag>2)?1:0);
 
@@ -6503,6 +6504,25 @@
 	if(totpart==0)
 		return derivedData;
 
+	if(pimd->flag & eParticleInstanceFlag_UseSize) {
+		int p;
+		float *si;
+		si = size = MEM_callocN(totpart * sizeof(float), "particle size array");
+
+		if(pimd->flag & eParticleInstanceFlag_Parents) {
+			for(p=0, pa= psys->particles; p<psys->totpart; p++, pa++, si++)
+				*si = pa->size;
+		}
+
+		if(pimd->flag & eParticleInstanceFlag_Children) {
+			ChildParticle *cpa = psys->child;
+
+			for(p=0; p<psys->totchild; p++, cpa++, si++) {
+				*si = psys_get_child_size(psys, cpa, 0.0f, NULL);
+			}
+		}
+	}
+
 	pars=psys->particles;
 
 	totvert=dm->getNumVerts(dm);
@@ -6585,10 +6605,12 @@
 		}
 		else{
 			state.time=-1.0;
-			psys_get_particle_state(md->scene, pimd->ob, psys, i/totvert, &state,1);
+			psys_get_particle_state(md->scene, pimd->ob, psys, first_particle + i/totvert, &state,1);
 		}	
 
 		QuatMulVecf(state.rot,mv->co);
+		if(pimd->flag & eParticleInstanceFlag_UseSize)
+			VecMulf(mv->co, size[i/totvert]);
 		VECADD(mv->co,mv->co,state.co);
 	}
 
@@ -6641,6 +6663,9 @@
 		psys->lattice= NULL;
 	}
 
+	if(size)
+		MEM_freeN(size);
+
 	return result;
 }
 static DerivedMesh *particleInstanceModifier_applyModifierEM(
@@ -7279,10 +7304,10 @@
 
 	timestep= psys_get_timestep(part);
 
-	if(part->flag & PART_GLOB_TIME)
+	//if(part->flag & PART_GLOB_TIME)
 		cfra=bsystem_time(scene, 0,(float)scene->r.cfra,0.0);
-	else
-		cfra=bsystem_time(scene, ob,(float)scene->r.cfra,0.0);
+	//else
+	//	cfra=bsystem_time(scene, ob,(float)scene->r.cfra,0.0);
 
 	/* hash table for vertice <-> particle relations */
 	vertpahash= BLI_edgehash_new();

Modified: branches/blender2.5/blender/source/blender/makesdna/DNA_modifier_types.h
===================================================================
--- branches/blender2.5/blender/source/blender/makesdna/DNA_modifier_types.h	2009-07-05 06:36:56 UTC (rev 21371)
+++ branches/blender2.5/blender/source/blender/makesdna/DNA_modifier_types.h	2009-07-05 12:36:20 UTC (rev 21372)
@@ -504,6 +504,7 @@
 	eParticleInstanceFlag_Alive =		(1<<4),
 	eParticleInstanceFlag_Dead =		(1<<5),
 	eParticleInstanceFlag_KeepShape =	(1<<6),
+	eParticleInstanceFlag_UseSize =		(1<<7),
 } ParticleInstanceModifierFlag;
 
 typedef struct ParticleInstanceModifierData {

Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_modifier.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/rna_modifier.c	2009-07-05 06:36:56 UTC (rev 21371)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_modifier.c	2009-07-05 12:36:20 UTC (rev 21372)
@@ -1365,6 +1365,11 @@
 	RNA_def_property_ui_text(prop, "Keep Shape", "Don't stretch the object.");
 	RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Modifier_update");
 
+	prop= RNA_def_property(srna, "size", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_boolean_sdna(prop, NULL, "flag", eParticleInstanceFlag_UseSize);
+	RNA_def_property_ui_text(prop, "Size", "Use particle size to scale the instances.");
+	RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Modifier_update");
+
 	prop= RNA_def_property(srna, "position", PROP_FLOAT, PROP_NONE);
 	RNA_def_property_float_sdna(prop, NULL, "position");
 	RNA_def_property_range(prop, 0.0, 1.0);





More information about the Bf-blender-cvs mailing list