From e3e7bf0bca85d676450271ccce42c3c257718f37 Mon Sep 17 00:00:00 2001 From: Geoff Hutchison Date: Fri, 16 Jul 2021 10:42:39 -0400 Subject: [PATCH] Fix #650 part 2 Bug raised by @mquevill - delete a non-selected atom Since deleting atoms renumbers, make sure selected atoms stays with "swap and pop" form from atom index, etc. Signed-off-by: Geoff Hutchison --- avogadro/core/molecule.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/avogadro/core/molecule.cpp b/avogadro/core/molecule.cpp index dc4ba2427..43f887953 100644 --- a/avogadro/core/molecule.cpp +++ b/avogadro/core/molecule.cpp @@ -346,8 +346,13 @@ bool Molecule::removeAtom(Index index) if (m_colors.size() == atomCount()) m_colors.swapAndPop(index); - if (m_selectedAtoms.size() == atomCount()) - m_selectedAtoms.erase(m_selectedAtoms.begin() + index); + if (m_selectedAtoms.size() == atomCount()) { + // swap and pop on std::vector + if (index != m_selectedAtoms.size() - 1) { + m_selectedAtoms[index] = m_selectedAtoms.back(); + } + m_selectedAtoms.pop_back(); + } Index affectedIndex = static_cast(m_atomicNumbers.size() - 1); m_atomicNumbers.swapAndPop(index);