-> 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:
@@ -93,6 +93,7 @@ extern void EM_selectmode_flush(void); // when selection changes
|
||||
extern void EM_convertsel(short oldmode, short selectmode);
|
||||
extern void EM_remove_selection(void *data, int type);
|
||||
extern void EM_store_selection(void *data, int type);
|
||||
extern void EM_validate_selections(void);
|
||||
|
||||
extern int EM_nfaces_selected(void);
|
||||
extern int EM_nvertices_selected(void);
|
||||
|
||||
@@ -612,7 +612,7 @@ void countall()
|
||||
if(efa->f & SELECT) G.totfacesel++;
|
||||
}
|
||||
|
||||
/*add code to strip editselections*/
|
||||
EM_validate_selections();
|
||||
}
|
||||
else if (G.obedit->type==OB_ARMATURE){
|
||||
for (ebo=G.edbo.first;ebo;ebo=ebo->next){
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user