Add body.find_all() to Python bindings.
This enables to generate a list of all body children of a given type. Also, add recursive option to mjs_firstChild and mjs_nextChild. Fixes #2112. PiperOrigin-RevId: 681039348 Change-Id: Iebbb26fd5ec314150206edfdddd88633baa0bec6
This commit is contained in:
committed by
Copybara-Service
parent
8a825e6050
commit
89aea5e217
+14
-4
@@ -655,17 +655,27 @@ void mjs_setDefault(mjsElement* element, mjsDefault* defspec) {
|
||||
|
||||
|
||||
// return first child of selected type
|
||||
mjsElement* mjs_firstChild(mjsBody* body, mjtObj type) {
|
||||
mjsElement* mjs_firstChild(mjsBody* body, mjtObj type, int recurse) {
|
||||
mjCBody* bodyC = static_cast<mjCBody*>(body->element);
|
||||
return bodyC->NextChild(NULL, type);
|
||||
try {
|
||||
return bodyC->NextChild(NULL, type, recurse);
|
||||
} catch (mjCError& e) {
|
||||
bodyC->model->SetError(e);
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// return body's next child; return NULL if child is last
|
||||
mjsElement* mjs_nextChild(mjsBody* body, mjsElement* child) {
|
||||
mjsElement* mjs_nextChild(mjsBody* body, mjsElement* child, int recurse) {
|
||||
mjCBody* bodyC = static_cast<mjCBody*>(body->element);
|
||||
return bodyC->NextChild(child);
|
||||
try {
|
||||
return bodyC->NextChild(child, child->elemtype, recurse);
|
||||
} catch(mjCError& e) {
|
||||
bodyC->model->SetError(e);
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user