[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [12695] trunk/blender/source/blender:
Brecht Van Lommel
brechtvanlommel at pandora.be
Tue Nov 27 18:20:35 CET 2007
Revision: 12695
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12695
Author: blendix
Date: 2007-11-27 18:20:35 +0100 (Tue, 27 Nov 2007)
Log Message:
-----------
Particles
=========
- Fix for child particles disappearing with right mouse drag translation.
- Added partial cache updates for selection, should make it a bit faster.
Modified Paths:
--------------
trunk/blender/source/blender/blenloader/intern/readfile.c
trunk/blender/source/blender/include/BIF_editparticle.h
trunk/blender/source/blender/src/editparticle.c
Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c 2007-11-27 16:16:47 UTC (rev 12694)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c 2007-11-27 17:20:35 UTC (rev 12695)
@@ -2975,6 +2975,7 @@
psmd->dm=0;
psmd->psys=newdataadr(fd, psmd->psys);
+ psmd->flag |= eParticleSystemFlag_Loaded;
psmd->flag &= ~eParticleSystemFlag_psys_updated;
} else if (md->type==eModifierType_Explode) {
ExplodeModifierData *psmd = (ExplodeModifierData*) md;
Modified: trunk/blender/source/blender/include/BIF_editparticle.h
===================================================================
--- trunk/blender/source/blender/include/BIF_editparticle.h 2007-11-27 16:16:47 UTC (rev 12694)
+++ trunk/blender/source/blender/include/BIF_editparticle.h 2007-11-27 17:20:35 UTC (rev 12695)
@@ -56,7 +56,7 @@
/* update calls */
void PE_hide_keys_time(struct ParticleSystem *psys, float cfra);
void PE_update_object(struct Object *ob, int useflag);
-void PE_update_selection(struct Object *ob);
+void PE_update_selection(struct Object *ob, int useflag);
void PE_recalc_world_cos(struct Object *ob, struct ParticleSystem *psys);
/* selection tools */
Modified: trunk/blender/source/blender/src/editparticle.c
===================================================================
--- trunk/blender/source/blender/src/editparticle.c 2007-11-27 16:16:47 UTC (rev 12694)
+++ trunk/blender/source/blender/src/editparticle.c 2007-11-27 17:20:35 UTC (rev 12695)
@@ -954,17 +954,25 @@
BLI_kdtree_balance(edit->emitter_field);
}
-void PE_update_selection(Object *ob)
+void PE_update_selection(Object *ob, int useflag)
{
ParticleSystem *psys= PE_get_current(ob);
ParticleEdit *edit= psys->edit;
+ ParticleEditSettings *pset= PE_settings();
+ ParticleSettings *part= psys->part;
ParticleData *pa;
HairKey *hkey;
ParticleEditKey *key;
+ float cfra= CFRA;
int i, k, totpart;
totpart= psys->totpart;
+ /* flag all particles to be updated if not using flag */
+ if(!useflag)
+ LOOP_PARTICLES(i,pa)
+ pa->flag |= PARS_EDIT_RECALC;
+
/* flush edit key flag to hair key flag to preserve selection
* on save */
LOOP_PARTICLES(i,pa) {
@@ -974,7 +982,14 @@
hkey->editflag= key->flag;
}
- psys_cache_paths(ob, psys, CFRA, 0);
+ psys_cache_paths(ob, psys, CFRA, 1);
+
+ if(part->childtype && (pset->flag & PE_SHOW_CHILD))
+ psys_cache_child_paths(ob, psys, cfra, 1);
+
+ /* disable update flag */
+ LOOP_PARTICLES(i,pa)
+ pa->flag &= ~PARS_EDIT_RECALC;
}
void PE_update_object(Object *ob, int useflag)
@@ -1109,12 +1124,15 @@
static void select_key(ParticleSystem *psys, int pa_index, int key_index, void *userData)
{
struct { short *mval; float rad; rcti* rect; int select; } *data = userData;
+ ParticleData *pa = psys->particles + pa_index;
ParticleEditKey *key = psys->edit->keys[pa_index] + key_index;
if(data->select)
key->flag|=PEK_SELECT;
else
key->flag&=~PEK_SELECT;
+
+ pa->flag |= PARS_EDIT_RECALC;
}
static void select_keys(ParticleSystem *psys, int pa_index, int key_index, void *userData)
{
@@ -1130,13 +1148,18 @@
key->flag&=~PEK_SELECT;
}
+ pa->flag |= PARS_EDIT_RECALC;
}
static void toggle_key_select(ParticleSystem *psys, int pa_index, int key_index, void *userData)
{
+ ParticleData *pa = psys->particles + pa_index;
+
if(psys->edit->keys[pa_index][key_index].flag&PEK_SELECT)
psys->edit->keys[pa_index][key_index].flag&=~PEK_SELECT;
else
psys->edit->keys[pa_index][key_index].flag|=PEK_SELECT;
+
+ pa->flag |= PARS_EDIT_RECALC;
}
static void select_root(ParticleSystem *psys, int index, void *userData)
{
@@ -1234,6 +1257,7 @@
if(key->flag&PEK_SELECT){
sel = 1;
key->flag &= ~PEK_SELECT;
+ pa->flag |= PARS_EDIT_RECALC;
}
}
}
@@ -1242,12 +1266,15 @@
LOOP_PARTICLES(i,pa){
if(pa->flag & PARS_HIDE) continue;
LOOP_KEYS(k,key){
- key->flag |= PEK_SELECT;
+ if(!(key->flag & PEK_SELECT)) {
+ key->flag |= PEK_SELECT;
+ pa->flag |= PARS_EDIT_RECALC;
+ }
}
}
}
- PE_update_selection(ob);
+ PE_update_selection(ob, 1);
BIF_undo_push("(De)select all keys");
allqueue(REDRAWVIEW3D, 1);
@@ -1278,7 +1305,10 @@
LOOP_PARTICLES(i,pa){
if(pa->flag & PARS_HIDE) continue;
LOOP_KEYS(k,key){
- key->flag &= ~PEK_SELECT;
+ if(key->flag & PEK_SELECT) {
+ key->flag &= ~PEK_SELECT;
+ pa->flag |= PARS_EDIT_RECALC;
+ }
}
}
@@ -1291,7 +1321,7 @@
for_mouse_hit_keys(1,psys,toggle_key_select,&data);
- PE_update_selection(ob);
+ PE_update_selection(ob, 1);
rightmouse_transform();
@@ -1335,7 +1365,7 @@
for_mouse_hit_keys(1,psys,select_keys,&data);
- PE_update_selection(ob);
+ PE_update_selection(ob, 1);
BIF_undo_push("Select linked keys");
@@ -1364,7 +1394,7 @@
for_mouse_hit_keys(0,psys,select_key,&data);
- PE_update_selection(ob);
+ PE_update_selection(ob, 1);
BIF_undo_push("Select keys");
@@ -1417,10 +1447,14 @@
Mat4MulVecfl(mat, co);
project_short(co,vertco);
if(lasso_inside(mcords,moves,vertco[0],vertco[1])){
- if(select)
+ if(select && !(key->flag & PEK_SELECT)) {
key->flag|=PEK_SELECT;
- else
+ pa->flag |= PARS_EDIT_RECALC;
+ }
+ else if(key->flag & PEK_SELECT) {
key->flag&=~PEK_SELECT;
+ pa->flag |= PARS_EDIT_RECALC;
+ }
}
}
}
@@ -1431,15 +1465,19 @@
Mat4MulVecfl(mat, co);
project_short(co,vertco);
if(lasso_inside(mcords,moves,vertco[0],vertco[1])){
- if(select)
+ if(select && !(key->flag & PEK_SELECT)) {
key->flag|=PEK_SELECT;
- else
+ pa->flag |= PARS_EDIT_RECALC;
+ }
+ else if(key->flag & PEK_SELECT) {
key->flag&=~PEK_SELECT;
+ pa->flag |= PARS_EDIT_RECALC;
+ }
}
}
}
- PE_update_selection(ob);
+ PE_update_selection(ob, 1);
BIF_undo_push("Lasso select particles");
More information about the Bf-blender-cvs
mailing list