[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