[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [34813] trunk/blender/source/blender/ editors/mesh/editmesh_tools.c: Fix #26059: select_vertex_path fails when vertices aren't selected 1 by 1 in gui

Sergey Sharybin g.ulairi at gmail.com
Sun Feb 13 11:25:13 CET 2011


Revision: 34813
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=34813
Author:   nazgul
Date:     2011-02-13 10:25:12 +0000 (Sun, 13 Feb 2011)
Log Message:
-----------
Fix #26059: select_vertex_path fails when vertices aren't selected 1 by 1 in gui

Cicrcle and border selection doesn't add entry to EditSelection. Use cycle
through vertices rather than EditSelection stack to find two selected vertices.

No slowdown for case two vertices are selected (use this cycle to clear temporary
flag too), minor slowdown for unsupported selections.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/mesh/editmesh_tools.c

Modified: trunk/blender/source/blender/editors/mesh/editmesh_tools.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_tools.c	2011-02-13 07:39:43 UTC (rev 34812)
+++ trunk/blender/source/blender/editors/mesh/editmesh_tools.c	2011-02-13 10:25:12 UTC (rev 34813)
@@ -5984,7 +5984,6 @@
 	EditMesh *em= BKE_mesh_get_editmesh((Mesh *)obedit->data);
 	EditVert *eve, *s, *t;
 	EditEdge *eed;
-	EditSelection *ese;
 	PathEdge *newpe, *currpe;
 	PathNode *currpn;
 	PathNode *Q;
@@ -5995,17 +5994,24 @@
 	Heap *heap; /*binary heap for sorting pointers to PathNodes based upon a 'cost'*/
 
 	s = t = NULL;
+	for(eve=em->verts.first; eve; eve=eve->next) {
+		if(eve->f&SELECT) {
+			if(s == NULL) s= eve;
+			else if(t == NULL) t= eve;
+			else {
+				/* more than two vertices are selected,
+				   show warning message and cancel operator */
+				s = t = NULL;
+				break;
+			}
 
-	ese = ((EditSelection*)em->selected.last);
-	if(ese && ese->type == EDITVERT && ese->prev && ese->prev->type == EDITVERT) {
-		t = (EditVert*)ese->data;
-		s = (EditVert*)ese->prev->data;
+		}
 
 		/*need to find out if t is actually reachable by s....*/
-		for(eve=em->verts.first; eve; eve=eve->next){
-			eve->f1 = 0;
-		}
+		eve->f1 = 0;
+	}
 
+	if(s != NULL && t != NULL) {
 		s->f1 = 1;
 
 		unbalanced = 1;




More information about the Bf-blender-cvs mailing list