Correctly handle the case of explicit zero mass in xml_native_writer.
PiperOrigin-RevId: 450901455 Change-Id: I77aaf2a214ac05ed1ed1e6ffe473bf98f2fea8ef
This commit is contained in:
committed by
Copybara-Service
parent
3034e8537c
commit
223874c4ca
@@ -290,7 +290,8 @@ void mjXWriter::OneGeom(XMLElement* elem, mjCGeom* pgeom, mjCDef* def) {
|
|||||||
WriteAttr(elem, "gap", 1, &pgeom->gap, &def->geom.gap);
|
WriteAttr(elem, "gap", 1, &pgeom->gap, &def->geom.gap);
|
||||||
WriteAttr(elem, "gap", 1, &pgeom->gap, &def->geom.gap);
|
WriteAttr(elem, "gap", 1, &pgeom->gap, &def->geom.gap);
|
||||||
if (mjuu_defined(pgeom->_mass)) {
|
if (mjuu_defined(pgeom->_mass)) {
|
||||||
WriteAttr(elem, "mass", 1, &pgeom->mass, &def->geom.mass);
|
double mass = pgeom->GetVolume() * def->geom.density;
|
||||||
|
WriteAttr(elem, "mass", 1, &pgeom->mass, &mass);
|
||||||
} else {
|
} else {
|
||||||
WriteAttr(elem, "density", 1, &pgeom->density, &def->geom.density);
|
WriteAttr(elem, "density", 1, &pgeom->density, &def->geom.density);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -214,6 +214,23 @@ TEST_F(XMLWriterTest, WritesMass) {
|
|||||||
mj_deleteModel(model);
|
mj_deleteModel(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(XMLWriterTest, ZeroMass) {
|
||||||
|
static constexpr char xml[] = R"(
|
||||||
|
<mujoco>
|
||||||
|
<worldbody>
|
||||||
|
<body>
|
||||||
|
<geom type="box" size=".05 .05 .05" mass="0"/>
|
||||||
|
</body>
|
||||||
|
</worldbody>
|
||||||
|
</mujoco>
|
||||||
|
)";
|
||||||
|
mjModel* model = LoadModelFromString(xml);
|
||||||
|
std::string saved_xml = SaveAndReadXml(model);
|
||||||
|
EXPECT_THAT(saved_xml, Not(HasSubstr("density")));
|
||||||
|
EXPECT_THAT(saved_xml, HasSubstr("mass=\"0\""));
|
||||||
|
mj_deleteModel(model);
|
||||||
|
}
|
||||||
|
|
||||||
TEST_F(XMLWriterTest, OverwritesDensity) {
|
TEST_F(XMLWriterTest, OverwritesDensity) {
|
||||||
static constexpr char xml[] = R"(
|
static constexpr char xml[] = R"(
|
||||||
<mujoco>
|
<mujoco>
|
||||||
|
|||||||
Reference in New Issue
Block a user