Enable procedural plugin activation in Python bindings.
PiperOrigin-RevId: 746055614 Change-Id: Idcc2f62fdfeccdca356e3d1acadf168b46a98881
This commit is contained in:
committed by
Copybara-Service
parent
b1f8d444f2
commit
a209134315
@@ -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};
|
||||
}}""",
|
||||
)
|
||||
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user