forked from bartvdbraak/blender
Fix for [#25185] Toggling hair dynamics without deleting cache leaves hair disattached when mesh animation is controlled by deformers - discussed with Jahka on IRC on Sat
This commit is contained in:
parent
a4b410af3d
commit
4cd06a6526
@ -234,7 +234,7 @@ class PARTICLE_PT_hair_dynamics(ParticleButtonsPanel, bpy.types.Panel):
|
||||
#part = psys.settings
|
||||
cloth = psys.cloth.settings
|
||||
|
||||
layout.enabled = psys.use_hair_dynamics
|
||||
layout.enabled = psys.use_hair_dynamics and psys.point_cache.is_baked == False
|
||||
|
||||
split = layout.split()
|
||||
|
||||
@ -274,12 +274,12 @@ class PARTICLE_PT_cache(ParticleButtonsPanel, bpy.types.Panel):
|
||||
phystype = psys.settings.physics_type
|
||||
if phystype == 'NO' or phystype == 'KEYED':
|
||||
return False
|
||||
return (psys.settings.type in ('EMITTER', 'REACTOR') or (psys.settings.type == 'HAIR' and psys.use_hair_dynamics)) and engine in cls.COMPAT_ENGINES
|
||||
return (psys.settings.type in ('EMITTER', 'REACTOR') or (psys.settings.type == 'HAIR' and (psys.use_hair_dynamics or psys.point_cache.is_baked))) and engine in cls.COMPAT_ENGINES
|
||||
|
||||
def draw(self, context):
|
||||
psys = context.particle_system
|
||||
|
||||
point_cache_ui(self, context, psys.point_cache, True, 'HAIR' if psys.use_hair_dynamics else 'PSYS')
|
||||
point_cache_ui(self, context, psys.point_cache, True, 'HAIR' if (psys.settings.type == 'HAIR') else 'PSYS')
|
||||
|
||||
|
||||
class PARTICLE_PT_velocity(ParticleButtonsPanel, bpy.types.Panel):
|
||||
|
@ -2795,7 +2795,7 @@ void psys_cache_paths(ParticleSimulationData *sim, float cfra)
|
||||
ParticleSettings *part = psys->part;
|
||||
ParticleCacheKey *ca, **cache= psys->pathcache;
|
||||
|
||||
DerivedMesh *hair_dm = psys->hair_out_dm;
|
||||
DerivedMesh *hair_dm = (psys->part->type==PART_HAIR && psys->flag & PSYS_HAIR_DYNAMICS) ? psys->hair_out_dm : NULL;
|
||||
|
||||
ParticleKey result;
|
||||
|
||||
@ -2828,7 +2828,7 @@ void psys_cache_paths(ParticleSimulationData *sim, float cfra)
|
||||
BLI_srandom(psys->seed);
|
||||
|
||||
keyed = psys->flag & PSYS_KEYED;
|
||||
baked = !hair_dm && psys->pointcache->mem_cache.first;
|
||||
baked = psys->pointcache->mem_cache.first && psys->part->type != PART_HAIR;
|
||||
|
||||
/* clear out old and create new empty path cache */
|
||||
psys_free_path_cache(psys, psys->edit);
|
||||
|
@ -302,6 +302,7 @@ static void rna_Particle_target_redo(Main *bmain, Scene *scene, PointerRNA *ptr)
|
||||
|
||||
static void rna_Particle_hair_dynamics(Main *bmain, Scene *scene, PointerRNA *ptr)
|
||||
{
|
||||
Object *ob = (Object*)ptr->id.data;
|
||||
ParticleSystem *psys = (ParticleSystem*)ptr->data;
|
||||
|
||||
if(psys && !psys->clmd) {
|
||||
@ -313,6 +314,8 @@ static void rna_Particle_hair_dynamics(Main *bmain, Scene *scene, PointerRNA *pt
|
||||
}
|
||||
else
|
||||
WM_main_add_notifier(NC_OBJECT|ND_PARTICLE|NA_EDITED, NULL);
|
||||
|
||||
DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
|
||||
}
|
||||
static PointerRNA rna_particle_settings_get(PointerRNA *ptr)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user