It seems like it is not natively possible for now, but here is a Heveti's script
- switch to Particle Edit - move at least one hair a bit to initiate hair editing
- enable Hair Dynamics and Play animation to simulate hairs
- move to frame where dynamics should be applied
lt- copy&paste script into blender's Text Editor and Run Alt+P script
Now when you switch to Particle Edit, hairs are at a position of your choice so you can continue with editing. Or enable Hair Dynamics again, move on start at Timeline and run simulation agin from this point of state.
import bpy
# How to use:
# 1. edit hair system (important, move at least one hair, at least a bit to initiate hair editing)
# 2. run hair dynamics
# 3. move to frame where dynamics should be applied
# 4. run script
# 5. if happy, delete cache
# 6. keep editing hair
# get the depsgraph and the evaluated object
deps_graph = bpy.context.evaluated_depsgraph_get()
evaluated_object = bpy.context.object.evaluated_get(deps_graph)
# assume context object has a particle system (warning, no check), use active
particle_system = evaluated_object.particle_systems.active
# Variable to hold hair-verticies-coordinats
hairs = []
# At current frame
# For each particle (hair)
# For each vertex
# Store XYZ coordinates
for p in particle_system.particles:
hair = []
for v in p.hair_keys:
hair.append([v.co[0], v.co[1], v.co[2]])
hairs.append(hair)
# Deactivate hair dynamics
particle_system.use_hair_dynamics = False
# On static hair system
# For each particle (hair)
# For each vertex
# Overwrite XYZ coordinates
for p,hair in zip(particle_system.particles,hairs):
for v,h in zip(p.hair_keys,hair):
#print(v.co, h)
v.co[0] = h[0]
v.co[1] = h[1]
v.co[2] = h[2]
#print(v.co, h)
# Update view and UI
bpy.context.scene.frame_set(bpy.context.scene.frame_current)