Do not overwrite existing parent frames for worldbody elements when attaching an mjSpec to a frame or a site.

PiperOrigin-RevId: 737662046
Change-Id: I7028c21c803c01845ae1d53cb476f7b3df172313
This commit is contained in:
Alessio Quaglino
2025-03-17 10:20:42 -07:00
committed by Copybara-Service
parent da04688071
commit 1bf24e9f67
9 changed files with 59 additions and 4 deletions
+19
View File
@@ -711,6 +711,25 @@ mjsBody* mjs_getParent(mjsElement* element) {
// get parent frame
mjsFrame* mjs_getFrame(mjsElement* element) {
mjCBase* base = static_cast<mjCBase*>(element);
switch (element->elemtype) {
case mjOBJ_BODY:
case mjOBJ_FRAME:
case mjOBJ_JOINT:
case mjOBJ_GEOM:
case mjOBJ_SITE:
case mjOBJ_CAMERA:
case mjOBJ_LIGHT:
return base->frame ? &(base->frame->spec) : nullptr;
default:
return nullptr;
}
}
// find frame by name
mjsFrame* mjs_findFrame(mjSpec* s, const char* name) {
mjsElement* frame = mjs_findElement(s, mjOBJ_FRAME, name);
+3
View File
@@ -211,6 +211,9 @@ MJAPI mjsBody* mjs_findChild(mjsBody* body, const char* name);
// Get parent body.
MJAPI mjsBody* mjs_getParent(mjsElement* element);
// Get parent frame.
MJAPI mjsFrame* mjs_getFrame(mjsElement* element);
// Find frame by name.
MJAPI mjsFrame* mjs_findFrame(mjSpec* s, const char* name);