From 07da7336e816d73849eab76909dbb9657c15fef2 Mon Sep 17 00:00:00 2001 From: Alessio Quaglino Date: Wed, 20 Mar 2024 01:14:57 -0700 Subject: [PATCH] Set mesh visual flag regardless of discardvisual. PiperOrigin-RevId: 617428859 Change-Id: I427d888e6caa2fe1ae6597ca7165c600c9779cc7 --- src/user/user_mesh.cc | 1 + src/user/user_model.cc | 19 +++++-------------- 2 files changed, 6 insertions(+), 14 deletions(-) diff --git a/src/user/user_mesh.cc b/src/user/user_mesh.cc index 59aad976..c85e3cd9 100644 --- a/src/user/user_mesh.cc +++ b/src/user/user_mesh.cc @@ -432,6 +432,7 @@ void mjCMesh::LoadSDF() { // compiler void mjCMesh::Compile(const mjVFS* vfs) { CopyFromSpec(); + visual_ = true; // load file if (!file_.empty()) { diff --git a/src/user/user_model.cc b/src/user/user_model.cc index 7c3fb4e6..8728b5e6 100644 --- a/src/user/user_model.cc +++ b/src/user/user_model.cc @@ -983,21 +983,12 @@ void mjCModel::IndexAssets(bool discard) { // find mesh by name if (!pgeom->get_meshname().empty()) { - mjCBase* m = FindObject(mjOBJ_MESH, pgeom->get_meshname()); - if (m) { - if (discard && geoms[i]->visual_) { - // do not associate with a mesh - pgeom->mesh = nullptr; - } else { - // associate mesh with geom - pgeom->mesh = (mjCMesh*)m; - - // mark mesh as not visual - // this is irreversible so only performed when IndexAssets is called with discard - if (discard) { - pgeom->mesh->SetNotVisual(); - } + mjCBase* pmesh = FindObject(mjOBJ_MESH, pgeom->get_meshname()); + if (pmesh) { + if (!pgeom->visual_) { + ((mjCMesh*)pmesh)->SetNotVisual(); // reset to true by mesh->Compile() } + pgeom->mesh = (discard && pgeom->visual_) ? nullptr : (mjCMesh*)pmesh; } else { throw mjCError(pgeom, "mesh '%s' not found in geom %d", pgeom->get_meshname().c_str(), i); }