[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [45582] trunk/blender: fix for UV reveal ( wasnt selecting all verts because check for unselected vert was incorrect after selecting the first face ).

Campbell Barton ideasman42 at gmail.com
Fri Apr 13 05:41:09 CEST 2012


Revision: 45582
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=45582
Author:   campbellbarton
Date:     2012-04-13 03:41:07 +0000 (Fri, 13 Apr 2012)
Log Message:
-----------
fix for UV reveal (wasnt selecting all verts because check for unselected vert was incorrect after selecting the first face).

Modified Paths:
--------------
    trunk/blender/intern/utfconv/CMakeLists.txt
    trunk/blender/source/blender/bmesh/intern/bmesh_marking.c
    trunk/blender/source/blender/bmesh/intern/bmesh_marking.h
    trunk/blender/source/blender/editors/mesh/editmesh_tools.c
    trunk/blender/source/blender/editors/uvedit/uvedit_ops.c

Modified: trunk/blender/intern/utfconv/CMakeLists.txt
===================================================================
--- trunk/blender/intern/utfconv/CMakeLists.txt	2012-04-13 00:04:56 UTC (rev 45581)
+++ trunk/blender/intern/utfconv/CMakeLists.txt	2012-04-13 03:41:07 UTC (rev 45582)
@@ -21,7 +21,7 @@
 )
 
 set(INC_SYS
-	${GLEW_INCLUDE_PATH}
+
 )
 
 set(SRC

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_marking.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_marking.c	2012-04-13 00:04:56 UTC (rev 45581)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_marking.c	2012-04-13 03:41:07 UTC (rev 45582)
@@ -452,7 +452,7 @@
  * Deselect's one type of elements then re-selects another,
  * Use case is to de-select stray edges or verts.
  */
-void BM_mesh_select_flush_strip(BMesh *bm, const char htype_desel, const char htype_sel)
+void BM_mesh_select_flush_strip(BMesh *bm, const char htype_desel, const char htype_sel, const char hflag_test)
 {
 	const char iter_types[3] = {BM_VERTS_OF_MESH,
 	                            BM_EDGES_OF_MESH,
@@ -477,7 +477,7 @@
 		if (htype_sel & flag_types[i]) {
 			ele = BM_iter_new(&iter, bm, iter_types[i], NULL);
 			for ( ; ele; ele = BM_iter_step(&iter)) {
-				if (BM_elem_flag_test(ele, BM_ELEM_SELECT)) {
+				if (BM_elem_flag_test(ele, hflag_test)) {
 					BM_elem_select_set(bm, ele, TRUE);
 				}
 			}

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_marking.h
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_marking.h	2012-04-13 00:04:56 UTC (rev 45581)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_marking.h	2012-04-13 03:41:07 UTC (rev 45582)
@@ -60,7 +60,7 @@
 void BM_mesh_deselect_flush(BMesh *bm);
 void BM_mesh_select_flush(BMesh *bm);
 
-void BM_mesh_select_flush_strip(BMesh *bm, const char htype_desel, const char htype_sel);
+void BM_mesh_select_flush_strip(BMesh *bm, const char htype_desel, const char htype_sel, const char hflag_test);
 
 int BM_mesh_enabled_flag_count(BMesh *bm, const char htype, const char hflag, int respecthide);
 int BM_mesh_disabled_flag_count(BMesh *bm, const char htype, const char hflag, int respecthide);

Modified: trunk/blender/source/blender/editors/mesh/editmesh_tools.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_tools.c	2012-04-13 00:04:56 UTC (rev 45581)
+++ trunk/blender/source/blender/editors/mesh/editmesh_tools.c	2012-04-13 03:41:07 UTC (rev 45582)
@@ -4534,7 +4534,7 @@
 		BM_mesh_elem_flag_disable_all(em->bm, BM_VERT | BM_EDGE, BM_ELEM_SELECT, FALSE);
 		BMO_slot_buffer_hflag_disable(em->bm, &bmop, "faceout", BM_FACE, BM_ELEM_SELECT, FALSE);
 		/* so selected faces verts & edges get selected */
-		BM_mesh_select_flush_strip(em->bm, BM_VERT | BM_EDGE, BM_FACE);
+		BM_mesh_select_flush_strip(em->bm, BM_VERT | BM_EDGE, BM_FACE, BM_ELEM_SELECT);
 	}
 
 	if (!EDBM_op_finish(em, &bmop, op, TRUE)) {

Modified: trunk/blender/source/blender/editors/uvedit/uvedit_ops.c
===================================================================
--- trunk/blender/source/blender/editors/uvedit/uvedit_ops.c	2012-04-13 00:04:56 UTC (rev 45581)
+++ trunk/blender/source/blender/editors/uvedit/uvedit_ops.c	2012-04-13 03:41:07 UTC (rev 45582)
@@ -3094,6 +3094,9 @@
 	int facemode= sima ? sima->flag & SI_SELACTFACE : 0;
 	int stickymode= sima ? (sima->sticky != SI_STICKY_DISABLE) : 1;
 
+	/* note on tagging, selecting faces needs to be delayed so it doesn't select the verts and
+	 * confuse our checks on selected verts. */
+
 	/* call the mesh function if we are in mesh sync sel */
 	if (ts->uv_flag & UV_SYNC_SELECTION) {
 		EDBM_mesh_reveal(em);
@@ -3104,12 +3107,14 @@
 	if (facemode) {
 		if (em->selectmode == SCE_SELECT_FACE) {
 			BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) {
+				BM_elem_flag_disable(efa, BM_ELEM_TAG);
 				if (!BM_elem_flag_test(efa, BM_ELEM_HIDDEN) && !BM_elem_flag_test(efa, BM_ELEM_SELECT)) {
-					BM_elem_select_set(em->bm, efa, TRUE);
 					BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) {
 						luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV);
 						luv->flag |= MLOOPUV_VERTSEL;
 					}
+					/* BM_elem_select_set(em->bm, efa, TRUE); */
+					BM_elem_flag_enable(efa, BM_ELEM_TAG);
 				}
 			}
 		}
@@ -3117,6 +3122,7 @@
 			/* enable adjacent faces to have disconnected UV selections if sticky is disabled */
 			if (!stickymode) {
 				BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) {
+					BM_elem_flag_disable(efa, BM_ELEM_TAG);
 					if (!BM_elem_flag_test(efa, BM_ELEM_HIDDEN) && !BM_elem_flag_test(efa, BM_ELEM_SELECT)) {
 						int totsel=0;
 						BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) {
@@ -3128,14 +3134,15 @@
 								luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV);
 								luv->flag |= MLOOPUV_VERTSEL;
 							}
-							
-							BM_elem_select_set(em->bm, efa, TRUE);
+							/* BM_elem_select_set(em->bm, efa, TRUE); */
+							BM_elem_flag_enable(efa, BM_ELEM_TAG);
 						}
 					}
 				}
 			}
 			else {
 				BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) {
+					BM_elem_flag_disable(efa, BM_ELEM_TAG);
 					if (!BM_elem_flag_test(efa, BM_ELEM_HIDDEN) && !BM_elem_flag_test(efa, BM_ELEM_SELECT)) {
 						BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) {
 							if (BM_elem_flag_test(l->v, BM_ELEM_SELECT)==0) {
@@ -3143,8 +3150,8 @@
 								luv->flag |= MLOOPUV_VERTSEL;
 							}
 						}
-						
-						BM_elem_select_set(em->bm, efa, TRUE);
+						/* BM_elem_select_set(em->bm, efa, TRUE); */
+						BM_elem_flag_enable(efa, BM_ELEM_TAG);
 					}
 				}
 			}
@@ -3152,18 +3159,20 @@
 	}
 	else if (em->selectmode == SCE_SELECT_FACE) {
 		BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) {
+			BM_elem_flag_disable(efa, BM_ELEM_TAG);
 			if (!BM_elem_flag_test(efa, BM_ELEM_HIDDEN) && !BM_elem_flag_test(efa, BM_ELEM_SELECT)) {
 				BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) {
 					luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV);
 					luv->flag |= MLOOPUV_VERTSEL;
 				}
-				
-				BM_elem_select_set(em->bm, efa, TRUE);
+				/* BM_elem_select_set(em->bm, efa, TRUE); */
+				BM_elem_flag_enable(efa, BM_ELEM_TAG);
 			}
 		}
 	}
 	else {
 		BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) {
+			BM_elem_flag_disable(efa, BM_ELEM_TAG);
 			if (!BM_elem_flag_test(efa, BM_ELEM_HIDDEN) && !BM_elem_flag_test(efa, BM_ELEM_SELECT)) {
 				BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) {
 					if (BM_elem_flag_test(l->v, BM_ELEM_SELECT)==0) {
@@ -3171,12 +3180,15 @@
 						luv->flag |= MLOOPUV_VERTSEL;
 					}
 				}
-				
-				BM_elem_select_set(em->bm, efa, TRUE);
+				/* BM_elem_select_set(em->bm, efa, TRUE); */
+				BM_elem_flag_enable(efa, BM_ELEM_TAG);
 			}
 		}
 	}
 	
+	/* de-select none, re-select tagged faces */
+	BM_mesh_select_flush_strip(em->bm, 0, BM_FACE, BM_ELEM_TAG);
+
 	WM_event_add_notifier(C, NC_GEOM|ND_SELECT, obedit->data);
 
 	return OPERATOR_FINISHED;




More information about the Bf-blender-cvs mailing list