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);
|
||||
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 {
|
||||
WriteAttr(elem, "density", 1, &pgeom->density, &def->geom.density);
|
||||
}
|
||||
|
||||
@@ -214,6 +214,23 @@ TEST_F(XMLWriterTest, WritesMass) {
|
||||
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) {
|
||||
static constexpr char xml[] = R"(
|
||||
<mujoco>
|
||||
|
||||
Reference in New Issue
Block a user