Is it possible to iterate through particles like vertices of a mesh, to kill some? I'm trying to remove overlapping particles of still droplets.

  • $\begingroup$ I don't know how to do it, but I do know that each particle does have it's own unique Index number -- I found it in the "Particle Info" node's Index value. I hope this helps. $\endgroup$ – Thom Blair III Apr 26 '14 at 15:38
  • 1
    $\begingroup$ You might also be able to figure out some more useful information from this post on the Particle Info Node $\endgroup$ – Thom Blair III Apr 26 '14 at 15:39
  • 1
    $\begingroup$ I'm not sure if this is possible in the current release, but it seems like it will be in new releases (I think). $\endgroup$ – gandalf3 Apr 26 '14 at 19:29

Yes it is to some extent.

ps = obj.particle_systems[particle_sys]
particles = ps.particles

# on large objects list comprehension seems to be slower than index
# and . dotted access is also a slowing factor
for i in range(len(particles)):
    # alive_state
    # angular_velocity
    # birth_time
    # die_time
    # hair_keys
    # is_exist
    # is_visible
    # lifetime
    pt = particles[i]
    if pt.is_exist and pt.alive_state == 'ALIVE':
        # do something... add_loc(pt.location[:])
    # prev_angular_velocity
    # prev_location
    # prev_rotation
    # prev_velocity
    # rotation
    # size
    # velocity

pt.location would give the coordinate. The Particles API seems to be slightly under-developed, but perhaps this info will help you.

  • $\begingroup$ I know this is an old post, but wondering: when I do pt.is_visible, I get a warning that "is_visible" is read-only. Is this always the case, or is there something you need to do in order to be able to edit this parameter? $\endgroup$ – user61149 Aug 22 '18 at 22:45
  • $\begingroup$ i'd like to think i tried .is_visible before suggesting that, but am not sure anymore. $\endgroup$ – zeffii Aug 23 '18 at 8:14
  • $\begingroup$ the only property I routinely used for experimentation was pt.location "out of sight out of mind", also .size might be useful $\endgroup$ – zeffii Aug 23 '18 at 8:32
  • $\begingroup$ Thanks for the quick response! I'm running into issues with setting particle parameters using Python code. I've used .location and .size to change those values for specific particles, and when I print them I see the new values I specified... but in the 3-D viewer nothing changes. Is there something I need to do for my changes to reflect in the model visualization? One thing I noticed is that changing between Object and Particle Edit mode causes the particle parameters to revert to their starting values. Many thanks in advance for any insight you might have! $\endgroup$ – user61149 Aug 23 '18 at 22:32
  • $\begingroup$ unfortunately the particle API is weak sauce. One thing that you need to do is to trigger an update (to scene..i think). Rotating 3d view after passing a new value to a particle is enough to show what i mean. However in relation to doing this for many particles in a scriptable way you may want to add an event handler to trigger that update. (kind of outside of the scope of the comment section...). $\endgroup$ – zeffii Aug 27 '18 at 10:53

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.