From f1b305632c59aada730a7cd92e34638208a3d9ee Mon Sep 17 00:00:00 2001 From: Alessio Quaglino Date: Tue, 10 Mar 2026 04:40:54 -0700 Subject: [PATCH] Allow mesh with octrees in mjc_distance. PiperOrigin-RevId: 881355677 Change-Id: I8da9f7c92d6e76f16a5d82e7d16488211a8a65b7 --- src/engine/engine_collision_sdf.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/engine/engine_collision_sdf.c b/src/engine/engine_collision_sdf.c index 543c93d4..cd959411 100644 --- a/src/engine/engine_collision_sdf.c +++ b/src/engine/engine_collision_sdf.c @@ -278,6 +278,14 @@ static mjtNum geomDistance(const mjModel* m, const mjData* d, const mjpPlugin* p } else { return oct_distance(m, x, i); } + + case mjGEOM_MESH: + if (m->mesh_octadr[i] == -1) { + mjERROR("sdf queries require needsdf=\"true\" on mesh %d", i); + return 0; + } + return oct_distance(m, x, i); + default: mjERROR("sdf collisions not available for geom type %d", type); return 0; @@ -389,6 +397,15 @@ static void geomGradient(mjtNum gradient[3], const mjModel* m, const mjData* d, oct_gradient(m, gradient, x, i); } break; + + case mjGEOM_MESH: + if (m->mesh_octadr[i] == -1) { + mjERROR("sdf queries require needsdf=\"true\" on mesh %d", i); + return; + } + oct_gradient(m, gradient, x, i); + break; + default: mjERROR("sdf collisions not available for geom type %d", type); }