1
$\begingroup$

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?

$\endgroup$
0
$\begingroup$

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
$\endgroup$
  • $\begingroup$ Thank you, that worked. Just one follow up question. When I run the script the empties are created with an offset on the Z axis. Why's that? $\endgroup$ – xrogueleaderx Sep 12 at 11:00
0
$\begingroup$

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[0]
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

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.