diff --git a/release/scripts/ui/properties_particle.py b/release/scripts/ui/properties_particle.py index bd6d2e13c88..7f630d6e5ff 100644 --- a/release/scripts/ui/properties_particle.py +++ b/release/scripts/ui/properties_particle.py @@ -27,7 +27,13 @@ from properties_physics_common import basic_force_field_falloff_ui def particle_panel_enabled(context, psys): - return (psys.point_cache.is_baked is False) and (not psys.is_edited) and (not context.particle_system_editable) + phystype = psys.settings.physics_type + if phystype == 'NO' or phystype == 'KEYED': + return True + if psys.settings.type in ('EMITTER', 'REACTOR') or (psys.settings.type == 'HAIR' and psys.use_hair_dynamics): + return (psys.point_cache.is_baked is False) and (not psys.is_edited) and (not context.particle_system_editable) + else: + return True def particle_panel_poll(cls, context): diff --git a/source/blender/blenkernel/intern/pointcache.c b/source/blender/blenkernel/intern/pointcache.c index f503858a70f..5007ce68a67 100644 --- a/source/blender/blenkernel/intern/pointcache.c +++ b/source/blender/blenkernel/intern/pointcache.c @@ -1008,11 +1008,22 @@ void BKE_ptcache_ids_from_object(ListBase *lb, Object *ob, Scene *scene, int dup } for(psys=ob->particlesystem.first; psys; psys=psys->next) { - if(psys->part) { - pid= MEM_callocN(sizeof(PTCacheID), "PTCacheID"); - BKE_ptcache_id_from_particles(pid, ob, psys); - BLI_addtail(lb, pid); - } + if(psys->part==NULL) + continue; + + /* check to make sure point cache is actually used by the particles */ + if(ELEM(psys->part->phystype, PART_PHYS_NO, PART_PHYS_KEYED)) + continue; + + if(psys->part->type == PART_HAIR && (psys->flag & PSYS_HAIR_DYNAMICS)==0) + continue; + + if(psys->part->type == PART_FLUID) + continue; + + pid= MEM_callocN(sizeof(PTCacheID), "PTCacheID"); + BKE_ptcache_id_from_particles(pid, ob, psys); + BLI_addtail(lb, pid); } for(md=ob->modifiers.first; md; md=md->next) {