Add convenient plugin assignment in Python bindings.

PiperOrigin-RevId: 861168536
Change-Id: I274fbf3460d475434f837ab58bf5e2b0988369fd
This commit is contained in:
Alessio Quaglino
2026-01-26 06:36:56 -08:00
committed by Copybara-Service
parent bdb553ff8a
commit 54ace777c1
2 changed files with 31 additions and 4 deletions
@@ -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: