-
Notifications
You must be signed in to change notification settings - Fork 35
Description
When a particle splits during optimization on a MeshDomain, the new particle position is computed as a raw Euclidean offset via the base class ParticleDomain::GetPositionAfterSplit. This doesn't account for the mesh surface, so the new particle can land off-mesh and must rely on a subsequent snap to get back on-surface. This is generally not a problem, but with extremely thin surfaces, the split can actually end up on the other side of the object.
The base class has a todo noting this should use UpdateParticlePosition instead, which for MeshDomain performs a geodesic_walk along the surface. ContourDomain already has its own override doing this correctly.
Expected behavior: Split particles should be placed on the mesh surface using geodesic walk, consistent with how all other particle movements work on mesh domains.