From 4fe8f73e44e4f9d451d0c5a7ade93eceaca130f7 Mon Sep 17 00:00:00 2001 From: Lou Rohan Date: Mon, 23 Feb 2026 12:44:22 -0600 Subject: [PATCH] Add USD parsing for contact excludes - Contact excludes use the UsdPhysicsFilteredPairsAPI schema. Body1 is the body with the schema, body2 is contained in the list of filtered targets within the schema. --- plugin/usd_decoder/usd_decoder.cc | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/plugin/usd_decoder/usd_decoder.cc b/plugin/usd_decoder/usd_decoder.cc index ebf2bb5d..0d4e400d 100644 --- a/plugin/usd_decoder/usd_decoder.cc +++ b/plugin/usd_decoder/usd_decoder.cc @@ -67,6 +67,7 @@ #include #include #include +#include #include #include #include @@ -2248,6 +2249,20 @@ void ParseMjcPhysicsKeyframe(mjSpec* spec, } } +void ParseUsdFilteredPairsAPI(mjSpec* spec, const pxr::UsdPrim& prim) { + if (!prim.HasAPI()) { + return; + } + auto filtered_pairs_api = pxr::UsdPhysicsFilteredPairsAPI(prim); + pxr::SdfPathVector filtered_bodies; + filtered_pairs_api.GetFilteredPairsRel().GetTargets(&filtered_bodies); + for (const auto& filtered_body : filtered_bodies) { + mjsExclude* exclude = mjs_addExclude(spec); + mjs_setString(exclude->bodyname1, prim.GetPath().GetAsString().c_str()); + mjs_setString(exclude->bodyname2, filtered_body.GetAsString().c_str()); + } +} + mjsBody* ParseUsdPhysicsRigidbody( mjSpec* spec, const pxr::UsdPhysicsRigidBodyAPI& rigidbody_api, const pxr::UsdPrim& parent_prim, mjsBody* parent, @@ -2268,6 +2283,8 @@ mjsBody* ParseUsdPhysicsRigidbody( body->element, kUsdPrimPathKey, usd_primpath, [](const void* data) { delete static_cast(data); }); + ParseUsdFilteredPairsAPI(spec, prim); + return body; }