Add frame property to python bindings.
PiperOrigin-RevId: 762452877 Change-Id: I555cec650d04700f6718b4d77a866c821b90685c
This commit is contained in:
committed by
Copybara-Service
parent
e44513bee5
commit
e389872c7d
@@ -736,6 +736,13 @@ PYBIND11_MODULE(_specs, m) {
|
|||||||
return frame;
|
return frame;
|
||||||
},
|
},
|
||||||
py::return_value_policy::reference_internal);
|
py::return_value_policy::reference_internal);
|
||||||
|
mjsBody.def(
|
||||||
|
"frame",
|
||||||
|
[](raw::MjsBody* self) -> raw::MjsFrame* {
|
||||||
|
return mjs_getFrame(self->element);
|
||||||
|
},
|
||||||
|
py::return_value_policy::reference_internal);
|
||||||
|
|
||||||
|
|
||||||
// ============================= MJSFRAME ====================================
|
// ============================= MJSFRAME ====================================
|
||||||
mjsFrame.def("delete", [](raw::MjsFrame& self) { mjs_delete(self.element); });
|
mjsFrame.def("delete", [](raw::MjsFrame& self) { mjs_delete(self.element); });
|
||||||
@@ -767,6 +774,12 @@ PYBIND11_MODULE(_specs, m) {
|
|||||||
py::arg("body"), py::arg("prefix") = py::none(),
|
py::arg("body"), py::arg("prefix") = py::none(),
|
||||||
py::arg("suffix") = py::none(),
|
py::arg("suffix") = py::none(),
|
||||||
py::return_value_policy::reference_internal);
|
py::return_value_policy::reference_internal);
|
||||||
|
mjsFrame.def_property_readonly(
|
||||||
|
"frame",
|
||||||
|
[](raw::MjsFrame& self) -> raw::MjsFrame* {
|
||||||
|
return mjs_getFrame(self.element);
|
||||||
|
},
|
||||||
|
py::return_value_policy::reference_internal);
|
||||||
|
|
||||||
// ============================= MJSGEOM =====================================
|
// ============================= MJSGEOM =====================================
|
||||||
mjsGeom.def("delete", [](raw::MjsGeom& self) { mjs_delete(self.element); });
|
mjsGeom.def("delete", [](raw::MjsGeom& self) { mjs_delete(self.element); });
|
||||||
@@ -789,6 +802,12 @@ PYBIND11_MODULE(_specs, m) {
|
|||||||
[](raw::MjsGeom& self, raw::MjsDefault& default_) -> void {
|
[](raw::MjsGeom& self, raw::MjsDefault& default_) -> void {
|
||||||
mjs_setDefault(self.element, &default_);
|
mjs_setDefault(self.element, &default_);
|
||||||
});
|
});
|
||||||
|
mjsGeom.def_property_readonly(
|
||||||
|
"frame",
|
||||||
|
[](raw::MjsGeom& self) -> raw::MjsFrame* {
|
||||||
|
return mjs_getFrame(self.element);
|
||||||
|
},
|
||||||
|
py::return_value_policy::reference_internal);
|
||||||
|
|
||||||
// ============================= MJSJOINT ====================================
|
// ============================= MJSJOINT ====================================
|
||||||
mjsJoint.def("delete", [](raw::MjsJoint& self) { mjs_delete(self.element); });
|
mjsJoint.def("delete", [](raw::MjsJoint& self) { mjs_delete(self.element); });
|
||||||
@@ -811,6 +830,12 @@ PYBIND11_MODULE(_specs, m) {
|
|||||||
[](raw::MjsJoint& self, raw::MjsDefault& default_) -> void {
|
[](raw::MjsJoint& self, raw::MjsDefault& default_) -> void {
|
||||||
mjs_setDefault(self.element, &default_);
|
mjs_setDefault(self.element, &default_);
|
||||||
});
|
});
|
||||||
|
mjsJoint.def_property_readonly(
|
||||||
|
"frame",
|
||||||
|
[](raw::MjsJoint& self) -> raw::MjsFrame* {
|
||||||
|
return mjs_getFrame(self.element);
|
||||||
|
},
|
||||||
|
py::return_value_policy::reference_internal);
|
||||||
|
|
||||||
// ============================= MJSSITE =====================================
|
// ============================= MJSSITE =====================================
|
||||||
mjsSite.def("delete", [](raw::MjsSite& self) { mjs_delete(self.element); });
|
mjsSite.def("delete", [](raw::MjsSite& self) { mjs_delete(self.element); });
|
||||||
@@ -850,6 +875,12 @@ PYBIND11_MODULE(_specs, m) {
|
|||||||
py::arg("body"), py::arg("prefix") = py::none(),
|
py::arg("body"), py::arg("prefix") = py::none(),
|
||||||
py::arg("suffix") = py::none(),
|
py::arg("suffix") = py::none(),
|
||||||
py::return_value_policy::reference_internal);
|
py::return_value_policy::reference_internal);
|
||||||
|
mjsSite.def_property_readonly(
|
||||||
|
"frame",
|
||||||
|
[](raw::MjsSite& self) -> raw::MjsFrame* {
|
||||||
|
return mjs_getFrame(self.element);
|
||||||
|
},
|
||||||
|
py::return_value_policy::reference_internal);
|
||||||
|
|
||||||
// ============================= MJSCAMERA ===================================
|
// ============================= MJSCAMERA ===================================
|
||||||
mjsCamera.def("delete",
|
mjsCamera.def("delete",
|
||||||
@@ -873,6 +904,12 @@ PYBIND11_MODULE(_specs, m) {
|
|||||||
[](raw::MjsCamera& self, raw::MjsDefault& default_) -> void {
|
[](raw::MjsCamera& self, raw::MjsDefault& default_) -> void {
|
||||||
mjs_setDefault(self.element, &default_);
|
mjs_setDefault(self.element, &default_);
|
||||||
});
|
});
|
||||||
|
mjsCamera.def_property_readonly(
|
||||||
|
"frame",
|
||||||
|
[](raw::MjsCamera& self) -> raw::MjsFrame* {
|
||||||
|
return mjs_getFrame(self.element);
|
||||||
|
},
|
||||||
|
py::return_value_policy::reference_internal);
|
||||||
|
|
||||||
// ============================= MJSLIGHT ====================================
|
// ============================= MJSLIGHT ====================================
|
||||||
mjsLight.def("delete", [](raw::MjsLight& self) { mjs_delete(self.element); });
|
mjsLight.def("delete", [](raw::MjsLight& self) { mjs_delete(self.element); });
|
||||||
@@ -895,6 +932,12 @@ PYBIND11_MODULE(_specs, m) {
|
|||||||
[](raw::MjsLight& self, raw::MjsDefault& default_) -> void {
|
[](raw::MjsLight& self, raw::MjsDefault& default_) -> void {
|
||||||
mjs_setDefault(self.element, &default_);
|
mjs_setDefault(self.element, &default_);
|
||||||
});
|
});
|
||||||
|
mjsLight.def_property_readonly(
|
||||||
|
"frame",
|
||||||
|
[](raw::MjsLight& self) -> raw::MjsFrame* {
|
||||||
|
return mjs_getFrame(self.element);
|
||||||
|
},
|
||||||
|
py::return_value_policy::reference_internal);
|
||||||
|
|
||||||
// ============================= MJSMATERIAL =================================
|
// ============================= MJSMATERIAL =================================
|
||||||
mjsMaterial.def("delete",
|
mjsMaterial.def("delete",
|
||||||
|
|||||||
@@ -1069,6 +1069,15 @@ class SpecsTest(absltest.TestCase):
|
|||||||
frame = body.to_frame()
|
frame = body.to_frame()
|
||||||
np.testing.assert_array_equal(frame.pos, [1, 2, 3])
|
np.testing.assert_array_equal(frame.pos, [1, 2, 3])
|
||||||
|
|
||||||
|
def test_get_frame(self):
|
||||||
|
spec = mujoco.MjSpec()
|
||||||
|
body = spec.worldbody.add_body()
|
||||||
|
frame = body.add_frame()
|
||||||
|
geom = body.add_geom()
|
||||||
|
geom.set_frame(frame)
|
||||||
|
self.assertIsNotNone(frame)
|
||||||
|
self.assertIs(geom.frame, frame)
|
||||||
|
|
||||||
def test_attach_to_frame(self):
|
def test_attach_to_frame(self):
|
||||||
parent = mujoco.MjSpec()
|
parent = mujoco.MjSpec()
|
||||||
parent.assets = {'cube.obj': 'cube_content'}
|
parent.assets = {'cube.obj': 'cube_content'}
|
||||||
|
|||||||
Reference in New Issue
Block a user