diff --git a/Polyhedron/demo/Polyhedron/Scene_points_with_normal_item.cpp b/Polyhedron/demo/Polyhedron/Scene_points_with_normal_item.cpp index e924d47bdfe..44907e87656 100644 --- a/Polyhedron/demo/Polyhedron/Scene_points_with_normal_item.cpp +++ b/Polyhedron/demo/Polyhedron/Scene_points_with_normal_item.cpp @@ -470,9 +470,28 @@ void Scene_points_with_normal_item::resetSelection() void Scene_points_with_normal_item::selectDuplicates() { std::set unique_points; - for (Point_set::iterator ptit = d->m_points->begin(); ptit!= d->m_points->end();++ptit ) + std::vector unselected, selected; + for (Point_set::iterator ptit = d->m_points->begin(); ptit!= d->m_points->end(); ++ ptit) if ( !unique_points.insert(d->m_points->point(*ptit)).second) - d->m_points->select(ptit); + selected.push_back (*ptit); + else + unselected.push_back (*ptit); + + for (std::size_t i = 0; i < unselected.size(); ++ i) + *(d->m_points->begin() + i) = unselected[i]; + for (std::size_t i = 0; i < selected.size(); ++ i) + *(d->m_points->begin() + (unselected.size() + i)) = selected[i]; + + if (selected.empty ()) + { + d->m_points->unselect_all(); + } + else + { + d->m_points->set_first_selected + (d->m_points->begin() + unselected.size()); + } + invalidateOpenGLBuffers(); Q_EMIT itemChanged(); }