[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [40055] branches/bmesh/blender/source/ blender/bmesh: auto-merge was loosing the selection after running remove doubles, this is quite annoying.

Campbell Barton ideasman42 at gmail.com
Fri Sep 9 05:34:51 CEST 2011


Revision: 40055
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=40055
Author:   campbellbarton
Date:     2011-09-09 03:34:48 +0000 (Fri, 09 Sep 2011)
Log Message:
-----------
auto-merge was loosing the selection after running remove doubles, this is quite annoying.

added BM_MergeHFlag() inline function to OR flags together, run this on both verts before merging.

also removed not-helpful comments.

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/bmesh/bmesh.h
    branches/bmesh/blender/source/blender/bmesh/intern/bmesh_inline.c
    branches/bmesh/blender/source/blender/bmesh/operators/removedoubles.c

Modified: branches/bmesh/blender/source/blender/bmesh/bmesh.h
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/bmesh.h	2011-09-09 03:11:15 UTC (rev 40054)
+++ branches/bmesh/blender/source/blender/bmesh/bmesh.h	2011-09-09 03:34:48 UTC (rev 40055)
@@ -153,6 +153,7 @@
 
 /*stuff for dealing BM_ToggleHFlag header flags*/
 BM_INLINE void BM_ToggleHFlag(void *element, const int flag);
+BM_INLINE void BM_MergeHFlag(void *element_a, void *element_b);
 BM_INLINE void BM_SetIndex(void *element, const int index);
 BM_INLINE int BM_GetIndex(const void *element);
 

Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_inline.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_inline.c	2011-09-09 03:11:15 UTC (rev 40054)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_inline.c	2011-09-09 03:34:48 UTC (rev 40055)
@@ -8,24 +8,28 @@
 	return ((BMHeader *)element)->flag & flag;
 }
 
-/*stuff for dealing with header flags*/
 BM_INLINE void BM_SetHFlag(void *element, const int flag)
 {
 	((BMHeader *)element)->flag |= flag;
 }
 
-/*stuff for dealing with header flags*/
 BM_INLINE void BM_ClearHFlag(void *element, const int flag)
 {
 	((BMHeader *)element)->flag &= ~flag;
 }
 
-/*stuff for dealing BM_ToggleHFlag header flags*/
 BM_INLINE void BM_ToggleHFlag(void *element, const int flag)
 {
 	((BMHeader *)element)->flag ^= flag;
 }
 
+BM_INLINE void BM_MergeHFlag(void *element_a, void *element_b)
+{
+	((BMHeader *)element_a)->flag =
+	((BMHeader *)element_b)->flag = (((BMHeader *)element_a)->flag |
+	                                 ((BMHeader *)element_b)->flag);
+}
+
 BM_INLINE void BM_SetIndex(void *element, const int index)
 {
 	((BMHeader *)element)->index = index;

Modified: branches/bmesh/blender/source/blender/bmesh/operators/removedoubles.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/operators/removedoubles.c	2011-09-09 03:11:15 UTC (rev 40054)
+++ branches/bmesh/blender/source/blender/bmesh/operators/removedoubles.c	2011-09-09 03:34:48 UTC (rev 40055)
@@ -94,8 +94,12 @@
 	int a, b;
 
 	BM_ITER(v, &iter, bm, BM_VERTS_OF_MESH, NULL) {
-		if (BMO_Get_MapPointer(bm, op, "targetmap", v))
+		if ((v2= BMO_Get_MapPointer(bm, op, "targetmap", v))) {
 			BMO_SetFlag(bm, v, ELE_DEL);
+
+			/* merge the vertex flags, else we get randomly selected/unselected verts */
+			BM_MergeHFlag(v, v2);
+		}
 	}
 
 	BM_ITER(f, &iter, bm, BM_FACES_OF_MESH, NULL) {




More information about the Bf-blender-cvs mailing list