Add missing PointToLocal call in mjCPlugin copy constructor.
PiperOrigin-RevId: 752486555 Change-Id: I08b14476b9098e6473a4c00918ef3f9a287f35f6
This commit is contained in:
committed by
Copybara-Service
parent
4137a4c774
commit
75f196c7ef
@@ -861,6 +861,17 @@ class SpecsTest(absltest.TestCase):
|
|||||||
self.assertEqual(model.nplugin, 1)
|
self.assertEqual(model.nplugin, 1)
|
||||||
self.assertEqual(model.npluginattr, 7)
|
self.assertEqual(model.npluginattr, 7)
|
||||||
self.assertEqual(model.body_plugin[1], 0)
|
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):
|
def test_recompile_error(self):
|
||||||
main_xml = """
|
main_xml = """
|
||||||
|
|||||||
@@ -7271,6 +7271,8 @@ mjCPlugin::mjCPlugin(mjCModel* _model) {
|
|||||||
spec.plugin_name = &plugin_name;
|
spec.plugin_name = &plugin_name;
|
||||||
spec.name = &name;
|
spec.name = &name;
|
||||||
spec.info = &info;
|
spec.info = &info;
|
||||||
|
|
||||||
|
PointToLocal();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -7289,11 +7291,20 @@ mjCPlugin& mjCPlugin::operator=(const mjCPlugin& other) {
|
|||||||
parent = this;
|
parent = this;
|
||||||
plugin_slot = other.plugin_slot;
|
plugin_slot = other.plugin_slot;
|
||||||
}
|
}
|
||||||
|
PointToLocal();
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void mjCPlugin::PointToLocal() {
|
||||||
|
spec.element = static_cast<mjsElement*>(this);
|
||||||
|
spec.name = &name;
|
||||||
|
spec.info = &info;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// compiler
|
// compiler
|
||||||
void mjCPlugin::Compile(void) {
|
void mjCPlugin::Compile(void) {
|
||||||
mjCPlugin* plugin_instance = this;
|
mjCPlugin* plugin_instance = this;
|
||||||
|
|||||||
@@ -1587,6 +1587,9 @@ class mjCPlugin : public mjCPlugin_ {
|
|||||||
mjCPlugin(mjCModel*);
|
mjCPlugin(mjCModel*);
|
||||||
mjCPlugin(const mjCPlugin& other);
|
mjCPlugin(const mjCPlugin& other);
|
||||||
mjCPlugin& operator=(const mjCPlugin& other);
|
mjCPlugin& operator=(const mjCPlugin& other);
|
||||||
|
|
||||||
|
void PointToLocal();
|
||||||
|
|
||||||
mjsPlugin spec;
|
mjsPlugin spec;
|
||||||
mjCBase* parent; // parent object (only used when generating error message)
|
mjCBase* parent; // parent object (only used when generating error message)
|
||||||
int plugin_slot; // global registered slot number of the plugin
|
int plugin_slot; // global registered slot number of the plugin
|
||||||
|
|||||||
Reference in New Issue
Block a user