[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [45325] trunk/blender/source/blender: fix [#30768] Project from View UV map tool includes hidden geometry r45323

Campbell Barton ideasman42 at gmail.com
Mon Apr 2 06:46:01 CEST 2012


Revision: 45325
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=45325
Author:   campbellbarton
Date:     2012-04-02 04:45:44 +0000 (Mon, 02 Apr 2012)
Log Message:
-----------
fix [#30768] Project from View UV map tool includes hidden geometry r45323

select all could select hidden faces, now BM_mesh_elem_flag_enable/disable_all takes an argument to skip hidden elements.

Revision Links:
--------------
    http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=45323

Modified Paths:
--------------
    trunk/blender/source/blender/bmesh/intern/bmesh_marking.c
    trunk/blender/source/blender/bmesh/intern/bmesh_marking.h
    trunk/blender/source/blender/bmesh/operators/bmo_inset.c
    trunk/blender/source/blender/bmesh/operators/bmo_subdivide.c
    trunk/blender/source/blender/editors/mesh/editmesh_tools.c
    trunk/blender/source/blender/editors/mesh/editmesh_utils.c
    trunk/blender/source/blender/modifiers/intern/MOD_array.c

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_marking.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_marking.c	2012-04-02 03:51:16 UTC (rev 45324)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_marking.c	2012-04-02 04:45:44 UTC (rev 45325)
@@ -762,7 +762,7 @@
 	}
 }
 
-void BM_mesh_elem_flag_disable_all(BMesh *bm, const char htype, const char hflag)
+void BM_mesh_elem_flag_disable_all(BMesh *bm, const char htype, const char hflag, int respecthide)
 {
 	const char iter_types[3] = {BM_VERTS_OF_MESH,
 	                            BM_EDGES_OF_MESH,
@@ -778,7 +778,10 @@
 		BM_select_history_clear(bm);
 	}
 
-	if (htype == (BM_VERT | BM_EDGE | BM_FACE) && (hflag == BM_ELEM_SELECT)) {
+	if ((htype == (BM_VERT | BM_EDGE | BM_FACE)) &&
+	    (hflag == BM_ELEM_SELECT) &&
+	    (respecthide == FALSE))
+	{
 		/* fast path for deselect all, avoid topology loops
 		 * since we know all will be de-selected anyway. */
 		for (i = 0; i < 3; i++) {
@@ -794,6 +797,11 @@
 			if (htype & flag_types[i]) {
 				ele = BM_iter_new(&iter, bm, iter_types[i], NULL);
 				for ( ; ele; ele = BM_iter_step(&iter)) {
+
+					if (respecthide && BM_elem_flag_test(ele, BM_ELEM_HIDDEN)) {
+						continue;
+					}
+
 					if (hflag & BM_ELEM_SELECT) {
 						BM_elem_select_set(bm, ele, FALSE);
 					}
@@ -804,7 +812,7 @@
 	}
 }
 
-void BM_mesh_elem_flag_enable_all(BMesh *bm, const char htype, const char hflag)
+void BM_mesh_elem_flag_enable_all(BMesh *bm, const char htype, const char hflag, int respecthide)
 {
 	const char iter_types[3] = {BM_VERTS_OF_MESH,
 	                            BM_EDGES_OF_MESH,
@@ -812,6 +820,11 @@
 
 	const char flag_types[3] = {BM_VERT, BM_EDGE, BM_FACE};
 
+	/* use the nosel version when setting so under no
+	 * condition may a hidden face become selected.
+	 * Applying other flags to hidden faces is OK. */
+	const char hflag_nosel = hflag & ~BM_ELEM_SELECT;
+
 	BMIter iter;
 	BMElem *ele;
 	int i;
@@ -828,10 +841,15 @@
 		if (htype & flag_types[i]) {
 			ele = BM_iter_new(&iter, bm, iter_types[i], NULL);
 			for ( ; ele; ele = BM_iter_step(&iter)) {
+
+				if (respecthide && BM_elem_flag_test(ele, BM_ELEM_HIDDEN)) {
+					continue;
+				}
+
 				if (hflag & BM_ELEM_SELECT) {
 					BM_elem_select_set(bm, ele, TRUE);
 				}
-				BM_elem_flag_enable(ele, hflag);
+				BM_elem_flag_enable(ele, hflag_nosel);
 			}
 		}
 	}

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_marking.h
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_marking.h	2012-04-02 03:51:16 UTC (rev 45324)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_marking.h	2012-04-02 04:45:44 UTC (rev 45325)
@@ -45,8 +45,8 @@
 #define BM_elem_select_set(bm, ele, hide) _bm_elem_select_set(bm, &(ele)->head, hide)
 void _bm_elem_select_set(BMesh *bm, BMHeader *ele, int select);
 
-void BM_mesh_elem_flag_enable_all(BMesh *bm, const char htype, const char hflag);
-void BM_mesh_elem_flag_disable_all(BMesh *bm, const char htype, const char hflag);
+void BM_mesh_elem_flag_enable_all(BMesh *bm, const char htype, const char hflag, int respecthide);
+void BM_mesh_elem_flag_disable_all(BMesh *bm, const char htype, const char hflag, int respecthide);
 
 /* individual element select functions, BM_elem_select_set is a shortcut for these
  * that automatically detects which one to use*/

Modified: trunk/blender/source/blender/bmesh/operators/bmo_inset.c
===================================================================
--- trunk/blender/source/blender/bmesh/operators/bmo_inset.c	2012-04-02 03:51:16 UTC (rev 45324)
+++ trunk/blender/source/blender/bmesh/operators/bmo_inset.c	2012-04-02 04:45:44 UTC (rev 45325)
@@ -119,11 +119,11 @@
 	int i, j, k;
 
 	if (use_outset == FALSE) {
-		BM_mesh_elem_flag_disable_all(bm, BM_FACE, BM_ELEM_TAG);
+		BM_mesh_elem_flag_disable_all(bm, BM_FACE, BM_ELEM_TAG, FALSE);
 		BMO_slot_buffer_hflag_enable(bm, op, "faces", BM_FACE, BM_ELEM_TAG, FALSE);
 	}
 	else {
-		BM_mesh_elem_flag_enable_all(bm, BM_FACE, BM_ELEM_TAG);
+		BM_mesh_elem_flag_enable_all(bm, BM_FACE, BM_ELEM_TAG, FALSE);
 		BMO_slot_buffer_hflag_disable(bm, op, "faces", BM_FACE, BM_ELEM_TAG, FALSE);
 	}
 

Modified: trunk/blender/source/blender/bmesh/operators/bmo_subdivide.c
===================================================================
--- trunk/blender/source/blender/bmesh/operators/bmo_subdivide.c	2012-04-02 03:51:16 UTC (rev 45324)
+++ trunk/blender/source/blender/bmesh/operators/bmo_subdivide.c	2012-04-02 04:45:44 UTC (rev 45325)
@@ -1053,7 +1053,7 @@
 		// int i;
 		
 		/* deselect input */
-		BM_mesh_elem_flag_disable_all(bm, BM_VERT | BM_EDGE | BM_FACE, BM_ELEM_SELECT);
+		BM_mesh_elem_flag_disable_all(bm, BM_VERT | BM_EDGE | BM_FACE, BM_ELEM_SELECT, FALSE);
 
 		ele = BMO_iter_new(&iter, bm, &op, "outinner", BM_EDGE|BM_VERT);
 		for ( ; ele; ele = BMO_iter_step(&iter)) {

Modified: trunk/blender/source/blender/editors/mesh/editmesh_tools.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_tools.c	2012-04-02 03:51:16 UTC (rev 45324)
+++ trunk/blender/source/blender/editors/mesh/editmesh_tools.c	2012-04-02 04:45:44 UTC (rev 45325)
@@ -3463,7 +3463,7 @@
 
 	EDBM_op_init(em, &bmop, op, "split geom=%hvef use_only_faces=%b", BM_ELEM_SELECT, FALSE);
 	BMO_op_exec(em->bm, &bmop);
-	BM_mesh_elem_flag_disable_all(em->bm, BM_VERT | BM_EDGE | BM_FACE, BM_ELEM_SELECT);
+	BM_mesh_elem_flag_disable_all(em->bm, BM_VERT | BM_EDGE | BM_FACE, BM_ELEM_SELECT, FALSE);
 	BMO_slot_buffer_hflag_enable(em->bm, &bmop, "geomout", BM_ALL, BM_ELEM_SELECT, TRUE);
 	if (!EDBM_op_finish(em, &bmop, op, TRUE)) {
 		return OPERATOR_CANCELLED;

Modified: trunk/blender/source/blender/editors/mesh/editmesh_utils.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_utils.c	2012-04-02 03:51:16 UTC (rev 45324)
+++ trunk/blender/source/blender/editors/mesh/editmesh_utils.c	2012-04-02 04:45:44 UTC (rev 45325)
@@ -225,7 +225,7 @@
 
 	BMO_op_exec(bm, &bmop);
 
-	BM_mesh_elem_flag_disable_all(em->bm, BM_VERT | BM_EDGE | BM_FACE, BM_ELEM_SELECT);
+	BM_mesh_elem_flag_disable_all(em->bm, BM_VERT | BM_EDGE | BM_FACE, BM_ELEM_SELECT, FALSE);
 
 	BMO_slot_buffer_hflag_enable(em->bm, &bmop, selectslot, BM_ALL, BM_ELEM_SELECT, TRUE);
 
@@ -490,12 +490,12 @@
 
 void EDBM_flag_disable_all(BMEditMesh *em, const char hflag)
 {
-	BM_mesh_elem_flag_disable_all(em->bm, BM_VERT | BM_EDGE | BM_FACE, hflag);
+	BM_mesh_elem_flag_disable_all(em->bm, BM_VERT | BM_EDGE | BM_FACE, hflag, FALSE);
 }
 
 void EDBM_flag_enable_all(BMEditMesh *em, const char hflag)
 {
-	BM_mesh_elem_flag_enable_all(em->bm, BM_VERT | BM_EDGE | BM_FACE, hflag);
+	BM_mesh_elem_flag_enable_all(em->bm, BM_VERT | BM_EDGE | BM_FACE, hflag, TRUE);
 }
 
 /**************-------------- Undo ------------*****************/

Modified: trunk/blender/source/blender/modifiers/intern/MOD_array.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_array.c	2012-04-02 03:51:16 UTC (rev 45324)
+++ trunk/blender/source/blender/modifiers/intern/MOD_array.c	2012-04-02 04:45:44 UTC (rev 45325)
@@ -474,20 +474,20 @@
 	}
 
 	if ((amd->flags & MOD_ARR_MERGE) &&
-		(amd->flags & MOD_ARR_MERGEFINAL) &&
-		(count > 1)) {
+	    (amd->flags & MOD_ARR_MERGEFINAL) &&
+	    (count > 1))
+	{
 		/* Merge first and last copies. Note that we can't use the
-		   indexMap for this because (unless the array is forming a
-		   loop) the offset between first and last is different from
-		   dupe X to dupe X+1. */
+		 * indexMap for this because (unless the array is forming a
+		 * loop) the offset between first and last is different from
+		 * dupe X to dupe X+1. */
 
 		merge_first_last(em->bm, amd, &first_dupe_op, &dupe_op, &weld_op);
 	}
 
 	/* start capping */
-	if (start_cap || end_cap)
-	{
-		BM_mesh_elem_flag_enable_all(em->bm, BM_VERT, BM_ELEM_TAG);
+	if (start_cap || end_cap) {
+		BM_mesh_elem_flag_enable_all(em->bm, BM_VERT, BM_ELEM_TAG, FALSE);
 
 		if (start_cap) {
 			float startoffset[4][4];




More information about the Bf-blender-cvs mailing list