Fix for bug #7872: setting particles disp to 100 has no effect.
authorBrecht Van Lommel <brechtvanlommel@pandora.be>
Wed, 12 Dec 2007 21:49:48 +0000 (21:49 +0000)
committerBrecht Van Lommel <brechtvanlommel@pandora.be>
Wed, 12 Dec 2007 21:49:48 +0000 (21:49 +0000)
Fix for bug #7878: particle panels do not update properly when
chaning particle types.

source/blender/blenkernel/BKE_bad_level_calls.h
source/blender/blenkernel/intern/particle.c
source/blender/blenkernel/intern/particle_system.c

index 7a838ff76143adc8f4e64ad02c5dd1020a0721c8..8b9454f1a9d9e54deaa44b2b8ba0bb0e34c0b28a 100644 (file)
@@ -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);
 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;
 
 struct Material;
 extern struct Material defmaterial;
 
index 154ca9a57160c83b40f0a09bd74c40e43c722260..b7ee3d96ef02f1388c7232f71daf9fe6d421e86c 100644 (file)
@@ -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 */
        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);
 }
 
        VECCOPY(hairmat[3],orco);
 }
 
index 414b64cae6a67f56de894b68f4729c0c4dfdb328..4d9256a4931949003ecae4cf52cacb8ff8963a9c 100644 (file)
@@ -4377,6 +4377,10 @@ static void system_step(Object *ob, ParticleSystem *psys, ParticleSystemModifier
 
                psys->recalc &= ~PSYS_TYPE;
                alloc = 1;
 
                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;
        }
        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;
 
        /* 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; p<totpart; p++,pa++){
+       for(p=0, pa=psys->particles; p<totpart; p++,pa++){
                if(pa->r_rot[0] > disp)
                        pa->flag |= PARS_NO_DISP;
                else
                if(pa->r_rot[0] > disp)
                        pa->flag |= PARS_NO_DISP;
                else