-> Sanity Check for Selection History

Some operations like edge loop deselect would cause selection history
to become invalid. Added a sanity check to countall() to try and catch
these when they happen.
This commit is contained in:
2006-09-28 02:37:35 +00:00
parent b4e97c01ff
commit bd6e5d20c7
3 changed files with 17 additions and 2 deletions

View File

@@ -71,7 +71,7 @@ editmesh_lib: generic (no UI, no menus) operations/evaluators for editmesh data
#include "editmesh.h"
/* ********* Selection ************ */
/* ********* Selection History ************ */
static int EM_check_selection(void *data)
{
EditSelection *ese;
@@ -105,6 +105,20 @@ void EM_store_selection(void *data, int type)
}
}
void EM_validate_selections(void)
{
EditSelection *ese, *nextese;
EditMesh *em = G.editMesh;
ese = em->selected.first;
while(ese){
nextese = ese->next;
if(ese->type == EDITVERT && !(((EditVert*)ese->data)->f & SELECT)) BLI_freelinkN(&(em->selected), ese);
else if(ese->type == EDITEDGE && !(((EditEdge*)ese->data)->f & SELECT)) BLI_freelinkN(&(em->selected), ese);
else if(ese->type == EDITFACE && !(((EditFace*)ese->data)->f & SELECT)) BLI_freelinkN(&(em->selected), ese);
ese = nextese;
}
}
static void EM_strip_selections(void)
{
EditSelection *ese, *nextese;