From 699a6765e3e6143d5f5e6a152e8b9d5866a176af Mon Sep 17 00:00:00 2001 From: Alessio Quaglino Date: Mon, 20 Jan 2025 11:01:00 -0800 Subject: [PATCH] Add find functions for joints, lights, and cameras to mjSpec bindings. PiperOrigin-RevId: 717578768 Change-Id: I2087ccbb9cf8b3b8ec03e9eb2edb0707d4a4cac1 --- python/mujoco/specs.cc | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/python/mujoco/specs.cc b/python/mujoco/specs.cc index eb8e0ea9..560d5ba6 100644 --- a/python/mujoco/specs.cc +++ b/python/mujoco/specs.cc @@ -408,6 +408,27 @@ PYBIND11_MODULE(_specs, m) { return mjs_asGeom(mjs_findElement(self.ptr, mjOBJ_GEOM, name.c_str())); }, py::return_value_policy::reference_internal); + mjSpec.def( + "find_joint", + [](MjSpec& self, std::string& name) -> raw::MjsJoint* { + return mjs_asJoint( + mjs_findElement(self.ptr, mjOBJ_JOINT, name.c_str())); + }, + py::return_value_policy::reference_internal); + mjSpec.def( + "find_light", + [](MjSpec& self, std::string& name) -> raw::MjsLight* { + return mjs_asLight( + mjs_findElement(self.ptr, mjOBJ_LIGHT, name.c_str())); + }, + py::return_value_policy::reference_internal); + mjSpec.def( + "find_camera", + [](MjSpec& self, std::string& name) -> raw::MjsCamera* { + return mjs_asCamera( + mjs_findElement(self.ptr, mjOBJ_CAMERA, name.c_str())); + }, + py::return_value_policy::reference_internal); mjSpec.def("compile", [mjmodel_from_spec_ptr](MjSpec& self) -> py::object { if (self.assets.empty()) { return mjmodel_from_spec_ptr(reinterpret_cast(self.ptr));