Enable procedural plugin activation in Python bindings.

PiperOrigin-RevId: 746055614
Change-Id: Idcc2f62fdfeccdca356e3d1acadf168b46a98881
This commit is contained in:
Alessio Quaglino
2025-04-10 09:12:24 -07:00
committed by Copybara-Service
parent b1f8d444f2
commit a209134315
3 changed files with 18 additions and 13 deletions
@@ -84,6 +84,7 @@ def _value_binding_code(
fulltype = fulltype.replace('mjOption', 'raw::MjOption')
fulltype = fulltype.replace('mjVisual', 'raw::MjVisual')
fulltype = fulltype.replace('mjStatistic', 'raw::MjStatistic')
element = '.element' if fullvarname == 'plugin' else ''
def_property_args = (
f'"{varname}"',
@@ -91,7 +92,7 @@ def _value_binding_code(
return self.{fullvarname};
}}""",
f"""[]({rawclassname}& self, {fulltype} {varname}) {{
self.{fullvarname} = {varname};
self.{fullvarname}{element} = {varname}{element};
}}""",
)
+7
View File
@@ -483,6 +483,13 @@ PYBIND11_MODULE(_specs, m) {
py::arg("suffix") = py::none(), py::arg("site") = py::none(),
py::arg("frame") = py::none(),
py::return_value_policy::reference_internal);
mjSpec.def(
"activate_plugin",
[](MjSpec& self, std::string& name) {
mjs_activatePlugin(self.ptr, name.c_str());
},
py::arg("name"),
py::return_value_policy::reference_internal);
// ============================= MJSBODY =====================================
mjsBody.def(
+9 -12
View File
@@ -835,22 +835,19 @@ class SpecsTest(absltest.TestCase):
self.assertEqual(model.nsensor, 9)
def test_plugin(self):
xml = """
<mujoco>
<extension>
<plugin plugin="mujoco.elasticity.cable"/>
</extension>
</mujoco>
"""
spec = mujoco.MjSpec.from_string(xml)
self.assertIsNotNone(spec.worldbody)
spec = mujoco.MjSpec()
spec.activate_plugin('mujoco.elasticity.cable')
plugin = spec.add_plugin(
name='instance_name',
plugin_name='mujoco.elasticity.cable',
active=True,
info='info',
)
body = spec.worldbody.add_body()
body.plugin = plugin
body.plugin.plugin_name = 'mujoco.elasticity.cable'
body.plugin.id = spec.add_plugin()
body.plugin.active = True
self.assertEqual(body.plugin.id, 0)
geom = body.add_geom()
geom.type = mujoco.mjtGeom.mjGEOM_BOX