[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [19520] trunk/blender/source/blender: Cleanup of particle object visualization code.

Janne Karhu jhkarh at utu.fi
Fri Apr 3 16:54:29 CEST 2009


Revision: 19520
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19520
Author:   jhk
Date:     2009-04-03 16:54:29 +0200 (Fri, 03 Apr 2009)

Log Message:
-----------
Cleanup of particle object visualization code. No new features and hopefully no new bugs.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/anim.c
    trunk/blender/source/blender/makesdna/DNA_particle_types.h
    trunk/blender/source/blender/src/buttons_object.c
    trunk/blender/source/blender/src/edit.c

Modified: trunk/blender/source/blender/blenkernel/intern/anim.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/anim.c	2009-04-03 14:51:06 UTC (rev 19519)
+++ trunk/blender/source/blender/blenkernel/intern/anim.c	2009-04-03 14:54:29 UTC (rev 19520)
@@ -747,7 +747,7 @@
 	float ctime, pa_time, scale = 1.0f;
 	float tmat[4][4], mat[4][4], pamat[4][4], size=0.0;
 	float (*obmat)[4], (*oldobmat)[4];
-	int lay, a, b, k, step_nbr = 0, counter, hair = 0;
+	int lay, a, b, k, counter, hair = 0;
 	int totpart, totchild, totgroup=0, pa_num;
 
 	if(psys==0) return;
@@ -775,11 +775,6 @@
 	if((part->draw_as == PART_DRAW_OB && part->dup_ob) ||
 		(part->draw_as == PART_DRAW_GR && part->dup_group && part->dup_group->gobject.first)) {
 
-		if(psys->flag & (PSYS_HAIR_DONE|PSYS_KEYED) && part->draw & PART_DRAW_KEYS)
-			step_nbr = part->keys_step;
-		else
-			step_nbr = 0;
-
 		/* if we have a hair particle system, use the path cache */
 		if(part->type == PART_HAIR) {
 			if(psys->flag & PSYS_HAIR_DONE)
@@ -859,76 +854,65 @@
 				oldobmat= obcopy.obmat;
 			}
 
-			for(k=0; k<=step_nbr; k++, counter++) {
-				if(hair) {
-					/* hair we handle separate and compute transform based on hair keys */
-					if(a < totpart) {
-						cache = psys->pathcache[a];
-						psys_get_dupli_path_transform(par, psys, psmd, pa, 0, cache, pamat, &scale);
-					}
-					else {
-						cache = psys->childcache[a-totpart];
-						psys_get_dupli_path_transform(par, psys, psmd, 0, cpa, cache, pamat, &scale);
-					}
-
-					VECCOPY(pamat[3], cache->co);
-					pamat[3][3]= 1.0f;
-					
+			if(hair) {
+				/* hair we handle separate and compute transform based on hair keys */
+				if(a < totpart) {
+					cache = psys->pathcache[a];
+					psys_get_dupli_path_transform(par, psys, psmd, pa, 0, cache, pamat, &scale);
 				}
-				else if(step_nbr) {
-					/* other keys */
-					state.time = (float)k / (float)step_nbr;
-					psys_get_particle_on_path(par, psys, a, &state, 0);
-
-					QuatToMat4(state.rot, pamat);
-					VECCOPY(pamat[3], state.co);
-					pamat[3][3]= 1.0f;
-				}
 				else {
-					/* first key */
-					state.time = -1.0;
-					if(psys_get_particle_state(par, psys, a, &state, 0) == 0)
-						continue;
-
-					QuatToMat4(state.rot, pamat);
-					VECCOPY(pamat[3], state.co);
-					pamat[3][3]= 1.0f;
+					cache = psys->childcache[a-totpart];
+					psys_get_dupli_path_transform(par, psys, psmd, 0, cpa, cache, pamat, &scale);
 				}
 
-				if(part->draw_as==PART_DRAW_GR && psys->part->draw & PART_DRAW_WHOLE_GR) {
-					for(go= part->dup_group->gobject.first, b=0; go; go= go->next, b++) {
-						Mat4MulMat4(tmat, oblist[b]->obmat, pamat);
-						Mat4MulFloat3((float *)tmat, size*scale);
-						if(par_space_mat)
-							Mat4MulMat4(mat, tmat, par_space_mat);
-						else
-							Mat4CpyMat4(mat, tmat);
+				VECCOPY(pamat[3], cache->co);
+				pamat[3][3]= 1.0f;
+				
+			}
+			else {
+				/* first key */
+				state.time = ctime;
+				if(psys_get_particle_state(par, psys, a, &state, 0) == 0)
+					continue;
 
-						dob= new_dupli_object(lb, go->ob, mat, par->lay, counter, OB_DUPLIPARTS, animated);
-						Mat4CpyMat4(dob->omat, obcopylist[b].obmat);
-						if(G.rendering)
-							psys_get_dupli_texture(par, part, psmd, pa, cpa, dob->uv, dob->orco);
-					}
-				}
-				else {
-					/* to give ipos in object correct offset */
-					where_is_object_time(ob, ctime-pa_time);
-					
-					Mat4CpyMat4(mat, pamat);
+				QuatToMat4(state.rot, pamat);
+				VECCOPY(pamat[3], state.co);
+				pamat[3][3]= 1.0f;
+			}
 
-					Mat4MulMat4(tmat, obmat, mat);
+			if(part->draw_as==PART_DRAW_GR && psys->part->draw & PART_DRAW_WHOLE_GR) {
+				for(go= part->dup_group->gobject.first, b=0; go; go= go->next, b++) {
+					Mat4MulMat4(tmat, oblist[b]->obmat, pamat);
 					Mat4MulFloat3((float *)tmat, size*scale);
 					if(par_space_mat)
 						Mat4MulMat4(mat, tmat, par_space_mat);
 					else
 						Mat4CpyMat4(mat, tmat);
 
-					dob= new_dupli_object(lb, ob, mat, par->lay, counter, OB_DUPLIPARTS, animated);
-					Mat4CpyMat4(dob->omat, oldobmat);
+					dob= new_dupli_object(lb, go->ob, mat, par->lay, counter, OB_DUPLIPARTS, animated);
+					Mat4CpyMat4(dob->omat, obcopylist[b].obmat);
 					if(G.rendering)
 						psys_get_dupli_texture(par, part, psmd, pa, cpa, dob->uv, dob->orco);
 				}
 			}
+			else {
+				/* to give ipos in object correct offset */
+				where_is_object_time(ob, ctime-pa_time);
+				
+				Mat4CpyMat4(mat, pamat);
+
+				Mat4MulMat4(tmat, obmat, mat);
+				Mat4MulFloat3((float *)tmat, size*scale);
+				if(par_space_mat)
+					Mat4MulMat4(mat, tmat, par_space_mat);
+				else
+					Mat4CpyMat4(mat, tmat);
+
+				dob= new_dupli_object(lb, ob, mat, par->lay, counter, OB_DUPLIPARTS, animated);
+				Mat4CpyMat4(dob->omat, oldobmat);
+				if(G.rendering)
+					psys_get_dupli_texture(par, part, psmd, pa, cpa, dob->uv, dob->orco);
+			}
 		}
 
 		/* restore objects since they were changed in where_is_object_time */

Modified: trunk/blender/source/blender/makesdna/DNA_particle_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_particle_types.h	2009-04-03 14:51:06 UTC (rev 19519)
+++ trunk/blender/source/blender/makesdna/DNA_particle_types.h	2009-04-03 14:54:29 UTC (rev 19520)
@@ -304,7 +304,7 @@
 #define PART_DRAW_ANG		2
 #define PART_DRAW_SIZE		4
 #define PART_DRAW_EMITTER	8	/* render emitter also */
-#define PART_DRAW_KEYS		16
+//#define PART_DRAW_KEYS		16 /* not used anywhere */
 #define PART_DRAW_ADAPT		32
 #define PART_DRAW_COS		64
 #define PART_DRAW_BB_LOCK	128

Modified: trunk/blender/source/blender/src/buttons_object.c
===================================================================
--- trunk/blender/source/blender/src/buttons_object.c	2009-04-03 14:51:06 UTC (rev 19519)
+++ trunk/blender/source/blender/src/buttons_object.c	2009-04-03 14:54:29 UTC (rev 19520)
@@ -4433,7 +4433,10 @@
 	block= uiNewBlock(&curarea->uiblocks, "object_panel_particle_visual", UI_EMBOSS, UI_HELV, curarea->win);
 	if(uiNewPanel(curarea, block, "Visualization", "Particle", 640, 0, 318, 204)==0) return;
 
-	uiDefButS(block, MENU, B_PART_RECALC, "Billboard %x9|Group %x8|Object %x7|Path %x6|Line %x5|Axis %x4|Cross %x3|Circle %x2|Point %x1|None %x0", butx,buty,butw,buth, &part->draw_as, 14.0, 0.0, 0, 0, "How particles are visualized");
+	if(part->type==PART_HAIR)
+		uiDefButS(block, MENU, B_PART_RECALC, "Group %x8|Object %x7|Path %x6|None %x0", butx,buty,butw,buth, &part->draw_as, 14.0, 0.0, 0, 0, "How hair is visualized");
+	else
+		uiDefButS(block, MENU, B_PART_RECALC, "Billboard %x9|Group %x8|Object %x7|Path %x6|Line %x5|Axis %x4|Cross %x3|Circle %x2|Point %x1|None %x0", butx,buty,butw,buth, &part->draw_as, 14.0, 0.0, 0, 0, "How particles are visualized");
 
 	if(part->draw_as==PART_DRAW_NOT) {
 		uiDefButBitS(block, TOG, PART_DRAW_EMITTER, B_PART_REDRAW, "Render emitter",	butx,(buty-=2*buth),butw,buth, &part->draw, 0, 0, 0, 0, "Render emitter object");

Modified: trunk/blender/source/blender/src/edit.c
===================================================================
--- trunk/blender/source/blender/src/edit.c	2009-04-03 14:51:06 UTC (rev 19519)
+++ trunk/blender/source/blender/src/edit.c	2009-04-03 14:54:29 UTC (rev 19520)
@@ -792,19 +792,13 @@
 			if(ob->transflag & OB_DUPLIPARTS) {
 				ParticleSystem *psys;
 				ParticleSettings *part;
-				int step_nbr;
 
 				for(psys=ob->particlesystem.first; psys; psys=psys->next){
 					part=psys->part;
-					
-					//if(psys->flag&PSYS_BAKED && part->draw&PART_DRAW_KEYS)
-					//	step_nbr=part->keys_step;
-					//else
-						step_nbr=1;
 
 					if(part->draw_as==PART_DRAW_OB && part->dup_ob){
 						int tot=count_particles(psys);
-						count_object(part->dup_ob, 0, tot*step_nbr);
+						count_object(part->dup_ob, 0, tot);
 					}
 					else if(part->draw_as==PART_DRAW_GR && part->dup_group){
 						GroupObject *go;
@@ -818,7 +812,7 @@
 						go= part->dup_group->gobject.first;
 						while(go){
 							tot=count_particles_mod(psys,totgroup,cur);
-							count_object(go->ob, 0, tot*step_nbr);
+							count_object(go->ob, 0, tot);
 							cur++;
 							go=go->next;
 						}





More information about the Bf-blender-cvs mailing list