Is it possible to get the location (world space) of every mesh particle of a particle system and following that the vertex locations of every mesh particle using python?
Use the depsgraph
Using the code suggested here https://developer.blender.org/T58792
Adds an empty, displayed as a cube, at the particle location. Make the object with the particle system active, move to desired frame and run script.
import bpy from mathutils import Matrix context = bpy.context # beware removes all empties from scene (for testing) for mt in (o for o in context.scene.objects if o.data is None): bpy.data.objects.remove(mt) # get the depsgraph and the evaluated object dg = context.evaluated_depsgraph_get() ob = context.object.evaluated_get(dg) # assume context object has a ps, use active ps = ob.particle_systems.active # this is the instance object po = ps.settings.instance_object for p in ps.particles: # make a matrix for the particles M = p.rotation.to_matrix().to_4x4() M.translation = p.location # put an empty at particle bpy.ops.object.empty_add() mt = context.object mt.matrix_world = M # the scale mt.scale = (p.size,) * 3 mt.empty_display_type = 'CUBE'
The global location of each vertex of the instance object of the particle system will be
mt.matrix_world @ vert.co
Getting the location of particles of a particle system isn't particularly difficult. You can simply iterate through the particles:
particle_system = bpy.context.object.particle_systems for particle in particle_system.particles: print(particle.location)
Note: this doesn't seem to work in the latest 2.8 builds, where it appears that both particles and child_particles are empty collections. I'm guessing this is a bug, as it works just fine in 2.79