Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorGeoffrey Bantle <hairbat@yahoo.com>2006-09-28 06:37:35 +0400
committerGeoffrey Bantle <hairbat@yahoo.com>2006-09-28 06:37:35 +0400
commitbd6e5d20c7f4d34709b99576dce9cfa92c95227e (patch)
treec74b779f954d066480ad240033675bf6ba624a45 /source
parentb4e97c01ff7478cc7fbcbc33d12e37375d28b7aa (diff)
-> 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.
Diffstat (limited to 'source')
-rw-r--r--source/blender/include/BIF_editmesh.h1
-rw-r--r--source/blender/src/edit.c2
-rw-r--r--source/blender/src/editmesh_lib.c16
3 files changed, 17 insertions, 2 deletions
diff --git a/source/blender/include/BIF_editmesh.h b/source/blender/include/BIF_editmesh.h
index 7c5554de198..fc52405198b 100644
--- a/source/blender/include/BIF_editmesh.h
+++ b/source/blender/include/BIF_editmesh.h
@@ -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);
diff --git a/source/blender/src/edit.c b/source/blender/src/edit.c
index 914ddffb528..576b9c665d4 100644
--- a/source/blender/src/edit.c
+++ b/source/blender/src/edit.c
@@ -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){
diff --git a/source/blender/src/editmesh_lib.c b/source/blender/src/editmesh_lib.c
index 3234ddb7589..2f742d8e985 100644
--- a/source/blender/src/editmesh_lib.c
+++ b/source/blender/src/editmesh_lib.c
@@ -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;