diff --git a/source/blender/blenkernel/BKE_bad_level_calls.h b/source/blender/blenkernel/BKE_bad_level_calls.h index 7a838ff7614..8b9454f1a9d 100644 --- a/source/blender/blenkernel/BKE_bad_level_calls.h +++ b/source/blender/blenkernel/BKE_bad_level_calls.h @@ -91,8 +91,9 @@ extern struct ListBase editNurb; void mainqenter (unsigned short event, short val); void waitcursor(int); void allqueue(unsigned short event, short val); -#define REDRAWVIEW3D 0x4010 -#define REDRAWBUTSEDIT 0x4019 +#define REDRAWVIEW3D 0x4010 +#define REDRAWBUTSOBJECT 0x4018 +#define REDRAWBUTSEDIT 0x4019 struct Material; extern struct Material defmaterial; diff --git a/source/blender/blenkernel/intern/particle.c b/source/blender/blenkernel/intern/particle.c index 154ca9a5716..b7ee3d96ef0 100644 --- a/source/blender/blenkernel/intern/particle.c +++ b/source/blender/blenkernel/intern/particle.c @@ -2290,7 +2290,7 @@ void psys_mat_hair_to_orco(Object *ob, DerivedMesh *dm, short from, ParticleData psys_particle_on_dm(ob, dm, from, pa->num, pa->num_dmcache, pa->fuv, pa->foffset, vec, 0, 0, 0, orco, 0); /* see psys_face_mat for why this function is called */ - transform_mesh_orco_verts(ob->data, orco, 1, 1); + transform_mesh_orco_verts(ob->data, &orco, 1, 1); VECCOPY(hairmat[3],orco); } diff --git a/source/blender/blenkernel/intern/particle_system.c b/source/blender/blenkernel/intern/particle_system.c index 414b64cae6a..4d9256a4931 100644 --- a/source/blender/blenkernel/intern/particle_system.c +++ b/source/blender/blenkernel/intern/particle_system.c @@ -4377,6 +4377,10 @@ static void system_step(Object *ob, ParticleSystem *psys, ParticleSystemModifier psys->recalc &= ~PSYS_TYPE; alloc = 1; + + /* this is a bad level call, but currently type change + * can happen after redraw, so force redraw from here */ + allqueue(REDRAWBUTSOBJECT, 0); } else oldtotpart = psys->totpart; @@ -4428,7 +4432,7 @@ static void system_step(Object *ob, ParticleSystem *psys, ParticleSystemModifier /* set particles to be not calculated */ disp= (float)get_current_display_percentage(psys)/50.0f-1.0f; - if(disp<1.0f) for(p=0, pa=psys->particles; pparticles; pr_rot[0] > disp) pa->flag |= PARS_NO_DISP; else