soft_body_events
The tears applied during a step, whether they were generated by the simulation itself or requested with
SoftBody.tear_edge,
are reported the same way as the
collision events: by the event handler of the world (PhysicsWorld.event_handler).
Each event (a SoftBodyTearEvent) identifies the soft-body that tore and gives the
pieces it was split into, so the rendering of the scene can be updated accordingly:
A ChannelEventCollector keeps the tear events of every step until they are drained with its
drain_soft_body_tear_events method. Any other object following the EventHandler protocol can be used as the event
handler as well (the methods it doesn't need can be omitted): its handle_soft_body_tear_event(soft_bodies, event)
method is called at the end of the step for every soft-body that tore, soft_bodies being the SoftBodySet of the
world. The soft-bodies can be read during that call, but not modified. This is the same SoftBodyTearEvent as the one
returned by
PhysicsWorld.tear_soft_body and PhysicsWorld.cut_soft_body, so everything described in the
previous section applies to it as well:
# Tears applied during a step are reported to the event handler of the world.
collector = rp.ChannelEventCollector()
world.event_handler = collector
world.step()
for tear_event in collector.drain_soft_body_tear_events():
print(f"Soft body {tear_event.soft_body} tore")