Add mjs_getParent to retrieve the parent body of an object.
PiperOrigin-RevId: 715794859 Change-Id: Ib9792787cdb966f579938dde3f94ebabca8ef1fc
This commit is contained in:
committed by
Copybara-Service
parent
10c7207cea
commit
05d4c3d670
@@ -680,6 +680,12 @@ PYBIND11_MODULE(_specs, m) {
|
||||
return mjs_getSpec(self.element);
|
||||
},
|
||||
py::return_value_policy::reference_internal);
|
||||
mjsBody.def_property_readonly(
|
||||
"parent",
|
||||
[](raw::MjsBody& self) -> raw::MjsBody* {
|
||||
return mjs_getParent(self.element);
|
||||
},
|
||||
py::return_value_policy::reference_internal);
|
||||
mjsBody.def(
|
||||
"attach_frame",
|
||||
[](raw::MjsBody& self, raw::MjsFrame& frame,
|
||||
@@ -713,6 +719,12 @@ PYBIND11_MODULE(_specs, m) {
|
||||
mjsFrame.def("set_frame", [](raw::MjsFrame& self, raw::MjsFrame& frame) {
|
||||
mjs_setFrame(self.element, &frame);
|
||||
});
|
||||
mjsFrame.def_property_readonly(
|
||||
"parent",
|
||||
[](raw::MjsFrame& self) -> raw::MjsBody* {
|
||||
return mjs_getParent(self.element);
|
||||
},
|
||||
py::return_value_policy::reference_internal);
|
||||
mjsFrame.def(
|
||||
"attach_body",
|
||||
[](raw::MjsFrame& self, raw::MjsBody& body,
|
||||
@@ -760,6 +772,12 @@ PYBIND11_MODULE(_specs, m) {
|
||||
mjsGeom.def("set_default", [](raw::MjsGeom& self, raw::MjsDefault& def) {
|
||||
mjs_setDefault(self.element, &def);
|
||||
});
|
||||
mjsGeom.def_property_readonly(
|
||||
"parent",
|
||||
[](raw::MjsGeom& self) -> raw::MjsBody* {
|
||||
return mjs_getParent(self.element);
|
||||
},
|
||||
py::return_value_policy::reference_internal);
|
||||
mjsGeom.def(
|
||||
"default",
|
||||
[](raw::MjsGeom& self) -> raw::MjsDefault* {
|
||||
@@ -775,6 +793,12 @@ PYBIND11_MODULE(_specs, m) {
|
||||
mjsJoint.def("set_default", [](raw::MjsJoint& self, raw::MjsDefault& def) {
|
||||
mjs_setDefault(self.element, &def);
|
||||
});
|
||||
mjsJoint.def_property_readonly(
|
||||
"parent",
|
||||
[](raw::MjsJoint& self) -> raw::MjsBody* {
|
||||
return mjs_getParent(self.element);
|
||||
},
|
||||
py::return_value_policy::reference_internal);
|
||||
mjsJoint.def(
|
||||
"default",
|
||||
[](raw::MjsJoint& self) -> raw::MjsDefault* {
|
||||
@@ -790,6 +814,12 @@ PYBIND11_MODULE(_specs, m) {
|
||||
mjsSite.def("set_default", [](raw::MjsSite& self, raw::MjsDefault& def) {
|
||||
mjs_setDefault(self.element, &def);
|
||||
});
|
||||
mjsSite.def_property_readonly(
|
||||
"parent",
|
||||
[](raw::MjsSite& self) -> raw::MjsBody* {
|
||||
return mjs_getParent(self.element);
|
||||
},
|
||||
py::return_value_policy::reference_internal);
|
||||
mjsSite.def(
|
||||
"default",
|
||||
[](raw::MjsSite& self) -> raw::MjsDefault* {
|
||||
@@ -845,6 +875,12 @@ PYBIND11_MODULE(_specs, m) {
|
||||
mjsCamera.def("set_default", [](raw::MjsCamera& self, raw::MjsDefault& def) {
|
||||
mjs_setDefault(self.element, &def);
|
||||
});
|
||||
mjsCamera.def_property_readonly(
|
||||
"parent",
|
||||
[](raw::MjsCamera& self) -> raw::MjsBody* {
|
||||
return mjs_getParent(self.element);
|
||||
},
|
||||
py::return_value_policy::reference_internal);
|
||||
mjsCamera.def(
|
||||
"default",
|
||||
[](raw::MjsCamera& self) -> raw::MjsDefault* {
|
||||
@@ -860,6 +896,12 @@ PYBIND11_MODULE(_specs, m) {
|
||||
mjsLight.def("set_default", [](raw::MjsLight& self, raw::MjsDefault& def) {
|
||||
mjs_setDefault(self.element, &def);
|
||||
});
|
||||
mjsLight.def_property_readonly(
|
||||
"parent",
|
||||
[](raw::MjsLight& self) -> raw::MjsBody* {
|
||||
return mjs_getParent(self.element);
|
||||
},
|
||||
py::return_value_policy::reference_internal);
|
||||
mjsLight.def(
|
||||
"default",
|
||||
[](raw::MjsLight& self) -> raw::MjsDefault* {
|
||||
|
||||
@@ -646,6 +646,10 @@ class SpecsTest(absltest.TestCase):
|
||||
self.assertEqual(spec.bodies[2].name, 'body2')
|
||||
self.assertEqual(spec.bodies[3].name, 'body3')
|
||||
self.assertEqual(spec.bodies[4].name, 'body4')
|
||||
self.assertEqual(spec.bodies[1].parent, spec.worldbody)
|
||||
self.assertEqual(spec.bodies[2].parent, spec.worldbody)
|
||||
self.assertEqual(spec.bodies[3].parent, spec.bodies[1])
|
||||
self.assertEqual(spec.bodies[4].parent, spec.bodies[3])
|
||||
self.assertLen(spec.worldbody.find_all(bodytype), 4)
|
||||
self.assertLen(spec.bodies[1].find_all(bodytype), 2)
|
||||
self.assertLen(spec.bodies[3].find_all(bodytype), 1)
|
||||
@@ -671,6 +675,11 @@ class SpecsTest(absltest.TestCase):
|
||||
self.assertEqual(spec.bodies[3].sites[2].name, 'site3')
|
||||
self.assertEqual(spec.bodies[3].sites[3].name, 'site4')
|
||||
self.assertEqual(spec.bodies[4].sites[0].name, 'site5')
|
||||
self.assertEqual(spec.bodies[3].sites[0].parent, spec.bodies[3])
|
||||
self.assertEqual(spec.bodies[3].sites[1].parent, spec.bodies[3])
|
||||
self.assertEqual(spec.bodies[3].sites[2].parent, spec.bodies[3])
|
||||
self.assertEqual(spec.bodies[3].sites[3].parent, spec.bodies[3])
|
||||
self.assertEqual(spec.bodies[4].sites[0].parent, spec.bodies[4])
|
||||
with self.assertRaises(ValueError) as cm:
|
||||
spec.worldbody.find_all('actuator')
|
||||
self.assertEqual(
|
||||
|
||||
Reference in New Issue
Block a user