[Bf-blender-cvs] [f9185c6] soc-2016-uv_tools: Proper Hiding: Make selection operators ignore hidden elements

Phil Gosch noreply at git.blender.org
Tue Jun 14 15:54:00 CEST 2016


Commit: f9185c646f1f78e653f57ec80f4f2fd62ef31d4a
Author: Phil Gosch
Date:   Tue Jun 14 15:53:16 2016 +0200
Branches: soc-2016-uv_tools
https://developer.blender.org/rBf9185c646f1f78e653f57ec80f4f2fd62ef31d4a

Proper Hiding: Make selection operators ignore hidden elements

===================================================================

M	source/blender/editors/uvedit/uvedit_ops.c

===================================================================

diff --git a/source/blender/editors/uvedit/uvedit_ops.c b/source/blender/editors/uvedit/uvedit_ops.c
index e510782..af48a73 100644
--- a/source/blender/editors/uvedit/uvedit_ops.c
+++ b/source/blender/editors/uvedit/uvedit_ops.c
@@ -407,7 +407,9 @@ bool uvedit_face_select_enable(Scene *scene, BMEditMesh *em, BMFace *efa, const
 
 		BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) {
 			luv = BM_ELEM_CD_GET_VOID_P(l, cd_loop_uv_offset);
-			luv->flag |= MLOOPUV_VERTSEL;
+			if (!(luv->flag & MLOOPUV_HIDDEN)) {
+				luv->flag |= MLOOPUV_VERTSEL;
+			}
 		}
 
 		return true;
@@ -505,8 +507,12 @@ void uvedit_edge_select_enable(BMEditMesh *em, Scene *scene, BMLoop *l, const bo
 		luv1 = BM_ELEM_CD_GET_VOID_P(l, cd_loop_uv_offset);
 		luv2 = BM_ELEM_CD_GET_VOID_P(l->next, cd_loop_uv_offset);
 		
-		luv1->flag |= MLOOPUV_VERTSEL;
-		luv2->flag |= MLOOPUV_VERTSEL;
+		if (!(luv1->flag & MLOOPUV_HIDDEN)) {
+			luv1->flag |= MLOOPUV_VERTSEL;
+		}
+		if (!(luv2->flag & MLOOPUV_HIDDEN)) {
+			luv2->flag |= MLOOPUV_VERTSEL;
+		}
 	}
 }
 
@@ -582,7 +588,9 @@ void uvedit_uv_select_enable(BMEditMesh *em, Scene *scene, BMLoop *l,
 	}
 	else {
 		MLoopUV *luv = BM_ELEM_CD_GET_VOID_P(l, cd_loop_uv_offset);
-		luv->flag |= MLOOPUV_VERTSEL;
+		if (!(luv->flag & MLOOPUV_HIDDEN)) {
+			luv->flag |= MLOOPUV_VERTSEL;
+		}
 	}
 }
 
@@ -2243,13 +2251,19 @@ static void uv_select_all_perform(Scene *scene, Image *ima, BMEditMesh *em, int
 
 				switch (action) {
 					case SEL_SELECT:
-						luv->flag |= MLOOPUV_VERTSEL;
+						if (!(luv->flag & MLOOPUV_HIDDEN)) { /* Skip hidden loops */
+							luv->flag |= MLOOPUV_VERTSEL;
+						}
 						break;
 					case SEL_DESELECT:
-						luv->flag &= ~MLOOPUV_VERTSEL;
+						if (!(luv->flag & MLOOPUV_HIDDEN)) {
+							luv->flag &= ~MLOOPUV_VERTSEL;
+						}
 						break;
 					case SEL_INVERT:
-						luv->flag ^= MLOOPUV_VERTSEL;
+						if (!(luv->flag & MLOOPUV_HIDDEN)) {
+							luv->flag ^= MLOOPUV_VERTSEL;
+						}
 						break;
 				}
 			}
@@ -3942,6 +3956,7 @@ static int uv_hide_exec(bContext *C, wmOperator *op)
 			luv = BM_ELEM_CD_GET_VOID_P(l, cd_loop_uv_offset);
 			if ((luv->flag & MLOOPUV_VERTSEL && !swap) || (!(luv->flag & MLOOPUV_VERTSEL) && swap)) {
 				luv->flag |= MLOOPUV_HIDDEN;
+				luv->flag &= ~MLOOPUV_VERTSEL; /* Deselect after hiding to avoid unwanted behaviour */
 			}
 		}
 	}
@@ -3967,7 +3982,7 @@ static void UV_OT_hide(wmOperatorType *ot)
 	ot->poll = ED_operator_uvedit;
 
 	/* props */
-	RNA_def_boolean(ot->srna, "unselected", 0, "Unselected", "Hide unselected rather than selected");
+	RNA_def_boolean(ot->srna, "unselected", 0, "Hide Unselected", "Hide unselected rather than selected");
 }
 
 /****************** reveal operator ******************/




More information about the Bf-blender-cvs mailing list