Add OnePlugin read/write functions and remove redundant plugin attributes from mjCActuator.
PiperOrigin-RevId: 525708657 Change-Id: I762de238f989b13877d5f9198c83c16ea9dc1d8b
This commit is contained in:
committed by
Copybara-Service
parent
34e62aa3c1
commit
4f5da9c554
@@ -618,24 +618,7 @@ void mjXWriter::OneActuator(XMLElement* elem, mjCActuator* pact, mjCDef* def) {
|
||||
|
||||
// plugins: write config attributes
|
||||
if (pact->is_plugin) {
|
||||
if (!pact->plugin_instance_name.empty()) {
|
||||
WriteAttrTxt(elem, "instance", pact->plugin_instance_name);
|
||||
} else {
|
||||
WriteAttrTxt(elem, "plugin", pact->plugin_name);
|
||||
const mjpPlugin* plugin = mjp_getPluginAtSlot(
|
||||
pact->plugin_instance->plugin_slot);
|
||||
const char* c = &pact->plugin_instance->flattened_attributes[0];
|
||||
for (int i = 0; i < plugin->nattribute; ++i) {
|
||||
std::string value(c);
|
||||
if (!value.empty()) {
|
||||
XMLElement* config_elem = InsertEnd(elem, "config");
|
||||
WriteAttrTxt(config_elem, "key", plugin->attributes[i]);
|
||||
WriteAttrTxt(config_elem, "value", value);
|
||||
c += value.size();
|
||||
}
|
||||
++c;
|
||||
}
|
||||
}
|
||||
OnePlugin(elem, pact);
|
||||
}
|
||||
|
||||
// non-plugins: write actuator parameters
|
||||
@@ -665,6 +648,30 @@ void mjXWriter::OneActuator(XMLElement* elem, mjCActuator* pact, mjCDef* def) {
|
||||
|
||||
|
||||
|
||||
// write plugin
|
||||
void mjXWriter::OnePlugin(XMLElement* elem, mjCBase* object) {
|
||||
if (!object->plugin_instance_name.empty()) {
|
||||
WriteAttrTxt(elem, "instance", object->plugin_instance_name);
|
||||
} else {
|
||||
WriteAttrTxt(elem, "plugin", object->plugin_name);
|
||||
const mjpPlugin* plugin = mjp_getPluginAtSlot(
|
||||
object->plugin_instance->plugin_slot);
|
||||
const char* c = &object->plugin_instance->flattened_attributes[0];
|
||||
for (int i = 0; i < plugin->nattribute; ++i) {
|
||||
std::string value(c);
|
||||
if (!value.empty()) {
|
||||
XMLElement* config_elem = InsertEnd(elem, "config");
|
||||
WriteAttrTxt(config_elem, "key", plugin->attributes[i]);
|
||||
WriteAttrTxt(config_elem, "value", value);
|
||||
c += value.size();
|
||||
}
|
||||
++c;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
//---------------------------------- class mjXWriter: top-level API --------------------------------
|
||||
|
||||
// constructor
|
||||
@@ -1382,24 +1389,7 @@ void mjXWriter::Body(XMLElement* elem, mjCBody* body) {
|
||||
|
||||
// write plugin
|
||||
if (body->is_plugin) {
|
||||
XMLElement *child = InsertEnd(elem, "plugin");
|
||||
if (!body->plugin_instance_name.empty()) {
|
||||
WriteAttrTxt(child, "instance", body->plugin_instance_name);
|
||||
} else {
|
||||
WriteAttrTxt(child, "plugin", body->plugin_name);
|
||||
const mjpPlugin* plugin = mjp_getPluginAtSlot(
|
||||
body->plugin_instance->plugin_slot);
|
||||
const char* c = &body->plugin_instance->flattened_attributes[0];
|
||||
for (int i = 0; i < plugin->nattribute; ++i) {
|
||||
std::string value(c);
|
||||
if (!value.empty()) {
|
||||
WriteAttrTxt(child, std::string("plugin:") + plugin->attributes[i],
|
||||
value);
|
||||
c += value.size();
|
||||
}
|
||||
++c;
|
||||
}
|
||||
}
|
||||
OnePlugin(elem, body);
|
||||
}
|
||||
|
||||
// write child bodies recursively
|
||||
|
||||
Reference in New Issue
Block a user