From 4c4ec56f49e41e75da1bf8d83ff36ff70f862f43 Mon Sep 17 00:00:00 2001 From: Janne Karhu Date: Fri, 23 Jul 2010 16:48:45 +0000 Subject: Fix for [#22644] hair particles bug 2, patch by Lukas Toenne --- source/blender/editors/physics/particle_edit.c | 33 ++++++++++++++++---------- 1 file changed, 21 insertions(+), 12 deletions(-) (limited to 'source/blender/editors') diff --git a/source/blender/editors/physics/particle_edit.c b/source/blender/editors/physics/particle_edit.c index 5ef805e25b4..f463da3f6a4 100644 --- a/source/blender/editors/physics/particle_edit.c +++ b/source/blender/editors/physics/particle_edit.c @@ -2098,6 +2098,7 @@ static void remove_tagged_keys(Scene *scene, Object *ob, ParticleSystem *psys) ParticleData *pa; HairKey *hkey, *nhkey, *new_hkeys=0; POINT_P; KEY_K; + PTCacheEditKey *nkey, *new_keys; ParticleSystemModifierData *psmd; short new_totkey; @@ -2133,9 +2134,10 @@ static void remove_tagged_keys(Scene *scene, Object *ob, ParticleSystem *psys) } if(new_totkey != pa->totkey) { - hkey= pa->hair; nhkey= new_hkeys= MEM_callocN(new_totkey*sizeof(HairKey), "HairKeys"); + nkey= new_keys= MEM_callocN(new_totkey*sizeof(PTCacheEditKey), "particle edit keys"); + hkey= pa->hair; LOOP_KEYS { while(key->flag & PEK_TAG && hkey < pa->hair + pa->totkey) { key++; @@ -2144,29 +2146,36 @@ static void remove_tagged_keys(Scene *scene, Object *ob, ParticleSystem *psys) if(hkey < pa->hair + pa->totkey) { VECCOPY(nhkey->co, hkey->co); + nhkey->editflag = hkey->editflag; nhkey->time= hkey->time; nhkey->weight= hkey->weight; + + nkey->co= nhkey->co; + nkey->time= &nhkey->time; + /* these can be copied from old edit keys */ + nkey->flag = key->flag; + nkey->ftime = key->ftime; + nkey->length = key->length; + VECCOPY(nkey->world_co, key->world_co); } - hkey++; + nkey++; nhkey++; + hkey++; } + if(pa->hair) MEM_freeN(pa->hair); + + if(point->keys) + MEM_freeN(point->keys); pa->hair= new_hkeys; + point->keys= new_keys; point->totkey= pa->totkey= new_totkey; - if(point->keys) - MEM_freeN(point->keys); - key= point->keys= MEM_callocN(new_totkey*sizeof(PTCacheEditKey), "particle edit keys"); - - hkey = pa->hair; - LOOP_KEYS { - key->co= hkey->co; - key->time= &hkey->time; - hkey++; - } + /* flag for recalculating length */ + point->flag |= PEP_EDIT_RECALC; } } } -- cgit v1.2.3