Add missing PointToLocal call in mjCPlugin copy constructor.

PiperOrigin-RevId: 752486555
Change-Id: I08b14476b9098e6473a4c00918ef3f9a287f35f6
This commit is contained in:
Alessio Quaglino
2025-04-28 16:22:55 -07:00
committed by Copybara-Service
parent 4137a4c774
commit 75f196c7ef
3 changed files with 25 additions and 0 deletions
+11
View File
@@ -861,6 +861,17 @@ class SpecsTest(absltest.TestCase):
self.assertEqual(model.nplugin, 1)
self.assertEqual(model.npluginattr, 7)
self.assertEqual(model.body_plugin[1], 0)
attributes = (''.join([chr(i) for i in model.plugin_attr]).split(chr(0)))
self.assertEqual(attributes[:2], ['10', '1'])
copy = spec.copy() # before assigning the new config
wrong_config = {'wrong': '10', 'bend': '1'}
for s in [spec, copy]:
s.plugins[0].config = wrong_config
with self.assertRaisesRegex(
ValueError, "Error: unrecognized attribute 'plugin:wrong'"
):
s.compile()
def test_recompile_error(self):
main_xml = """
+11
View File
@@ -7271,6 +7271,8 @@ mjCPlugin::mjCPlugin(mjCModel* _model) {
spec.plugin_name = &plugin_name;
spec.name = &name;
spec.info = &info;
PointToLocal();
}
@@ -7289,11 +7291,20 @@ mjCPlugin& mjCPlugin::operator=(const mjCPlugin& other) {
parent = this;
plugin_slot = other.plugin_slot;
}
PointToLocal();
return *this;
}
void mjCPlugin::PointToLocal() {
spec.element = static_cast<mjsElement*>(this);
spec.name = &name;
spec.info = &info;
}
// compiler
void mjCPlugin::Compile(void) {
mjCPlugin* plugin_instance = this;
+3
View File
@@ -1587,6 +1587,9 @@ class mjCPlugin : public mjCPlugin_ {
mjCPlugin(mjCModel*);
mjCPlugin(const mjCPlugin& other);
mjCPlugin& operator=(const mjCPlugin& other);
void PointToLocal();
mjsPlugin spec;
mjCBase* parent; // parent object (only used when generating error message)
int plugin_slot; // global registered slot number of the plugin