Add convenient plugin assignment in Python bindings.
PiperOrigin-RevId: 861168536 Change-Id: I274fbf3460d475434f837ab58bf5e2b0988369fd
This commit is contained in:
committed by
Copybara-Service
parent
bdb553ff8a
commit
54ace777c1
@@ -93,16 +93,26 @@ 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 ''
|
||||
element = ''
|
||||
|
||||
if field.name == 'mjsPlugin':
|
||||
setter = f"""[]({rawclassname}& self, {fulltype} {varname}) {{
|
||||
if (self.{fullvarname}.name && {varname}.name) *self.{fullvarname}.name = *{varname}.name;
|
||||
if (self.{fullvarname}.plugin_name && {varname}.plugin_name) *self.{fullvarname}.plugin_name = *{varname}.plugin_name;
|
||||
self.{fullvarname}.active = {varname}.active;
|
||||
if (self.{fullvarname}.info && {varname}.info) *self.{fullvarname}.info = *{varname}.info;
|
||||
}}"""
|
||||
else:
|
||||
setter = f"""[]({rawclassname}& self, {fulltype} {varname}) {{
|
||||
self.{fullvarname}{element} = {varname}{element};
|
||||
}}"""
|
||||
|
||||
def_property_args = (
|
||||
f'"{varname}"',
|
||||
f"""[]({rawclassname}& self) -> {fulltype} {{
|
||||
return self.{fullvarname};
|
||||
}}""",
|
||||
f"""[]({rawclassname}& self, {fulltype} {varname}) {{
|
||||
self.{fullvarname}{element} = {varname}{element};
|
||||
}}""",
|
||||
setter,
|
||||
)
|
||||
|
||||
if field.name not in SCALAR_TYPES:
|
||||
|
||||
@@ -996,6 +996,23 @@ class SpecsTest(absltest.TestCase):
|
||||
self.assertIsNotNone(model)
|
||||
self.assertEqual(model.nplugin, 0)
|
||||
|
||||
def testPluginAssignment(self):
|
||||
spec = mujoco.MjSpec()
|
||||
body = spec.worldbody.add_body()
|
||||
body.name = 'test_body'
|
||||
|
||||
plugin = spec.add_plugin(
|
||||
name='test_instance', plugin_name='mujoco.elasticity.cable', active=True
|
||||
)
|
||||
plugin.config = {'twist': '1e2', 'bend': '4e1'}
|
||||
|
||||
# Assignment should copy active flag and names
|
||||
body.plugin = plugin
|
||||
|
||||
self.assertTrue(body.plugin.active)
|
||||
self.assertEqual(body.plugin.name, 'test_instance')
|
||||
self.assertEqual(body.plugin.plugin_name, 'mujoco.elasticity.cable')
|
||||
|
||||
def test_access_option_stat_visual(self):
|
||||
spec = mujoco.MjSpec.from_string("""
|
||||
<mujoco model="MuJoCo Model">
|
||||
|
||||
Reference in New Issue
Block a user