Do not delete pending keyframes during body detachment.
PiperOrigin-RevId: 685670895 Change-Id: Iadd0ba8ca7e74a280559168ac0ac855405a1cfd9
This commit is contained in:
committed by
Copybara-Service
parent
c5a677a9de
commit
c84f35b425
@@ -462,11 +462,8 @@ mjCModel& mjCModel::operator-=(const mjCBody& subtree) {
|
||||
ProcessLists(/*checkrepeat=*/false);
|
||||
}
|
||||
|
||||
// TODO: carry over pending keyframes
|
||||
key_pending_.clear();
|
||||
StoreKeyframes();
|
||||
|
||||
// all keyframes are now pending and they will be resized
|
||||
StoreKeyframes();
|
||||
DeleteAll(keys_);
|
||||
|
||||
// remove body from tree
|
||||
|
||||
@@ -1456,10 +1456,12 @@ TEST_F(MujocoTest, ReplicateKeyframe) {
|
||||
EXPECT_THAT(m->nbody, 2);
|
||||
|
||||
// check that the keyframe is resized
|
||||
EXPECT_THAT(m->nkey, 1);
|
||||
EXPECT_THAT(m->nkey, 2);
|
||||
EXPECT_THAT(m->nq, 1);
|
||||
EXPECT_THAT(m->key_qpos[0], 0);
|
||||
EXPECT_STREQ(mj_id2name(m, mjOBJ_KEY, 0), "keyframe");
|
||||
EXPECT_THAT(m->key_qpos[0], 1);
|
||||
EXPECT_THAT(m->key_qpos[1], 0);
|
||||
EXPECT_STREQ(mj_id2name(m, mjOBJ_KEY, 0), "keyframe0");
|
||||
EXPECT_STREQ(mj_id2name(m, mjOBJ_KEY, 1), "keyframe");
|
||||
|
||||
mj_deleteModel(m);
|
||||
}
|
||||
|
||||
@@ -1304,9 +1304,14 @@ TEST_F(XMLReaderTest, ParseReplicate) {
|
||||
EXPECT_EQ(m->body_quat[4*n+2], 0);
|
||||
EXPECT_EQ(m->body_quat[4*n+3], 1);
|
||||
|
||||
// check that the pending keyframes are lost while detaching
|
||||
EXPECT_THAT(m->nkey, 0);
|
||||
// check that the keyframe is resized
|
||||
EXPECT_THAT(m->nkey, 102);
|
||||
EXPECT_THAT(m->nq, 101);
|
||||
for (int i = 0; i < m->nkey; i++) {
|
||||
for (int j = 0; j < m->nq; j++) {
|
||||
EXPECT_THAT(m->key_qpos[i*m->nq+j], i == j ? 1 : 0) << i << " " << j;
|
||||
}
|
||||
}
|
||||
|
||||
mj_deleteModel(m);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user