From a5a3c9efc70c6cd3034a49d5ee3671bf059101ad Mon Sep 17 00:00:00 2001 From: Alessio Quaglino Date: Thu, 4 Jul 2024 08:03:08 -0700 Subject: [PATCH] Discard all keyframes when attaching models. PiperOrigin-RevId: 649415647 Change-Id: Ie2defe248df7078684d987351985cb66bd754e5b --- src/user/user_model.cc | 8 ++++++++ src/user/user_objects.cc | 6 ++++++ 2 files changed, 14 insertions(+) diff --git a/src/user/user_model.cc b/src/user/user_model.cc index 50f37bf8..c1b1b3ae 100644 --- a/src/user/user_model.cc +++ b/src/user/user_model.cc @@ -1072,6 +1072,14 @@ void mjCModel::DeleteAll(std::vector& elements) { elements.clear(); } +template <> +void mjCModel::DeleteAll(std::vector& elements) { + for (mjCKey* element : elements) { + delete element; + } + elements.clear(); +} + // set nuser fields void mjCModel::SetNuser() { if (nuser_body == -1) { diff --git a/src/user/user_objects.cc b/src/user/user_objects.cc index 4260da3c..6cbfa6e4 100644 --- a/src/user/user_objects.cc +++ b/src/user/user_objects.cc @@ -860,6 +860,9 @@ mjCBody& mjCBody::operator+=(const mjCFrame& other) { // attach referencing elements *model += *other.model; + // (b/350784262) delete keyframes + model->DeleteAll(model->keys_); + // clear namespace and return body other.model->prefix.clear(); other.model->suffix.clear(); @@ -1598,6 +1601,9 @@ mjCFrame& mjCFrame::operator+=(const mjCBody& other) { // attach referencing elements *model += *other.model; + // (b/350784262) delete keyframes + model->DeleteAll(model->keys_); + // clear suffixes and return other.model->suffix.clear(); other.model->prefix.clear();