Check that there are no pending keyframes while writing a spec.
This can happen when a body is detached without compiling or recompiling. Also added error catching when trying to delete a body instead of detaching it. Fixes #2327 PiperOrigin-RevId: 712526730 Change-Id: I4b48df83120fca12d475c85b3a54893841449653
This commit is contained in:
committed by
Copybara-Service
parent
b5df2c10bf
commit
f607d9554e
@@ -858,7 +858,7 @@ mjXWriter::mjXWriter(void) {
|
||||
// cast model
|
||||
void mjXWriter::SetModel(const mjSpec* _spec, const mjModel* m) {
|
||||
if (_spec) {
|
||||
model = (mjCModel*)_spec->element;
|
||||
model = static_cast<mjCModel*>(_spec->element);
|
||||
}
|
||||
if (m) {
|
||||
model->CopyBack(m);
|
||||
@@ -2207,6 +2207,10 @@ void mjXWriter::Keyframe(XMLElement* root) {
|
||||
// create section
|
||||
XMLElement* section = InsertEnd(root, "keyframe");
|
||||
|
||||
if (!model->key_pending_.empty()) {
|
||||
throw mjXError(0, "Model has pending keyframes. It must be (re)compiled before writing XML.");
|
||||
}
|
||||
|
||||
// write all keyframes
|
||||
for (int i=0; i<model->nkey; i++) {
|
||||
XMLElement* elem = InsertEnd(section, "key");
|
||||
|
||||
Reference in New Issue
Block a user