Add mjmPair to C API.

PiperOrigin-RevId: 606274243
Change-Id: I15e2a38096a61bc1377a666c96113ae20ce3ed59
This commit is contained in:
Alessio Quaglino
2024-02-12 09:24:39 -08:00
committed by Copybara-Service
parent 72cf304e2b
commit 13d6eeacdd
8 changed files with 137 additions and 52 deletions
+20 -9
View File
@@ -1751,18 +1751,26 @@ void mjXReader::OneLight(XMLElement* elem, mjmLight* plight) {
// pair element parser
void mjXReader::OnePair(XMLElement* elem, mjCPair* ppair) {
string text;
void mjXReader::OnePair(XMLElement* elem, mjmPair* ppair) {
string text, name, classname, geomname1, geomname2;
// regular only
if (!readingdefaults) {
ReadAttrTxt(elem, "class", ppair->classname);
ReadAttrTxt(elem, "geom1", ppair->geomname1, true);
ReadAttrTxt(elem, "geom2", ppair->geomname2, true);
if (ReadAttrTxt(elem, "class", classname)) {
mjm_setString(ppair->classname, classname.c_str());
}
if (ReadAttrTxt(elem, "geom1", geomname1)) {
mjm_setString(ppair->geomname1, geomname1.c_str());
}
if (ReadAttrTxt(elem, "geom2", geomname2)) {
mjm_setString(ppair->geomname2, geomname2.c_str());
}
}
// read other parameters
ReadAttrTxt(elem, "name", ppair->name);
if (ReadAttrTxt(elem, "name", name)) {
mjm_setString(ppair->name, name.c_str());
}
ReadAttrInt(elem, "condim", &ppair->condim);
ReadAttr(elem, "solref", mjNREF, ppair->solref, text, false, false);
ReadAttr(elem, "solreffriction", mjNREF, ppair->solreffriction, text, false, false);
@@ -1771,7 +1779,9 @@ void mjXReader::OnePair(XMLElement* elem, mjCPair* ppair) {
ReadAttr(elem, "gap", 1, &ppair->gap, text);
ReadAttr(elem, "friction", 5, ppair->friction, text, false, false);
GetXMLPos(elem, ppair);
// write error info
mjm_setString(ppair->info,
std::string("line = " + std::to_string(elem->GetLineNum()) + ", column = -1").c_str());
}
@@ -2626,7 +2636,7 @@ void mjXReader::Default(XMLElement* section, int parentid) {
else if (name=="light") OneLight(elem, &def->light.spec);
// read pair
else if (name=="pair") OnePair(elem, &def->pair);
else if (name=="pair") OnePair(elem, &def->pair.spec);
// read equality
else if (name=="equality") OneEquality(elem, &def->equality.spec);
@@ -2658,6 +2668,7 @@ void mjXReader::Default(XMLElement* section, int parentid) {
mjm_finalize(def->equality.spec.element);
mjm_finalize(def->tendon.spec.element);
mjm_finalize(def->flex.spec.element);
mjm_finalize(def->pair.spec.element);
// advance
elem = NextSiblingElement(elem);
@@ -3338,7 +3349,7 @@ void mjXReader::Contact(XMLElement* section) {
// geom pair to include
if (name=="pair") {
// create pair and parse
mjCPair* ppair = model->AddPair(def);
mjmPair* ppair = mjm_addPair(model, def);
OnePair(elem, ppair);
}
+1 -1
View File
@@ -62,7 +62,7 @@ class mjXReader : public mjXBase {
void OneSite(tinyxml2::XMLElement* elem, mjmSite& site);
void OneCamera(tinyxml2::XMLElement* elem, mjmCamera* pcamera);
void OneLight(tinyxml2::XMLElement* elem, mjmLight* plight);
void OnePair(tinyxml2::XMLElement* elem, mjCPair* ppair);
void OnePair(tinyxml2::XMLElement* elem, mjmPair* ppair);
void OneEquality(tinyxml2::XMLElement* elem, mjmEquality* pequality);
void OneTendon(tinyxml2::XMLElement* elem, mjmTendon* ptendon);
void OneActuator(tinyxml2::XMLElement* elem, mjmActuator* pactuator);
+9 -9
View File
@@ -523,19 +523,19 @@ void mjXWriter::OnePair(XMLElement* elem, mjCPair* ppair, mjCDef* def) {
// regular
if (!writingdefaults) {
WriteAttrTxt(elem, "class", ppair->classname);
WriteAttrTxt(elem, "geom1", ppair->geomname1);
WriteAttrTxt(elem, "geom2", ppair->geomname2);
WriteAttrTxt(elem, "geom1", ppair->get_geomname1());
WriteAttrTxt(elem, "geom2", ppair->get_geomname2());
}
// defaults and regular
WriteAttrTxt(elem, "name", ppair->name);
WriteAttrInt(elem, "condim", ppair->condim, def->pair.condim);
WriteAttr(elem, "margin", 1, &ppair->margin, &def->pair.margin);
WriteAttr(elem, "gap", 1, &ppair->gap, &def->pair.gap);
WriteAttr(elem, "solref", mjNREF, ppair->solref, def->pair.solref);
WriteAttr(elem, "solreffriction", mjNREF, ppair->solreffriction, def->pair.solreffriction);
WriteAttr(elem, "solimp", mjNIMP, ppair->solimp, def->pair.solimp);
WriteAttr(elem, "friction", 5, ppair->friction, def->pair.friction);
WriteAttrInt(elem, "condim", ppair->condim, def->pair.spec.condim);
WriteAttr(elem, "margin", 1, &ppair->margin, &def->pair.spec.margin);
WriteAttr(elem, "gap", 1, &ppair->gap, &def->pair.spec.gap);
WriteAttr(elem, "solref", mjNREF, ppair->solref, def->pair.spec.solref);
WriteAttr(elem, "solreffriction", mjNREF, ppair->solreffriction, def->pair.spec.solreffriction);
WriteAttr(elem, "solimp", mjNIMP, ppair->solimp, def->pair.spec.solimp);
WriteAttr(elem, "friction", 5, ppair->friction, def->pair.spec.friction);
}