diff options
author | Campbell Barton <ideasman42@gmail.com> | 2011-09-09 07:34:48 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2011-09-09 07:34:48 +0400 |
commit | 7b637dc1670dcb1fd1749ab0136311054dabbf27 (patch) | |
tree | 685c4360b904a1f357fe41fa49bbf5bcfe856f29 /source/blender | |
parent | fa59b801898c807d958e131c6b3ae032dc0b0e38 (diff) |
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.
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/bmesh/bmesh.h | 1 | ||||
-rw-r--r-- | source/blender/bmesh/intern/bmesh_inline.c | 10 | ||||
-rw-r--r-- | source/blender/bmesh/operators/removedoubles.c | 6 |
3 files changed, 13 insertions, 4 deletions
diff --git a/source/blender/bmesh/bmesh.h b/source/blender/bmesh/bmesh.h index 3129b769f22..90349cb5e0e 100644 --- a/source/blender/bmesh/bmesh.h +++ b/source/blender/bmesh/bmesh.h @@ -153,6 +153,7 @@ BM_INLINE void BM_ClearHFlag(void *element, const int flag); /*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); diff --git a/source/blender/bmesh/intern/bmesh_inline.c b/source/blender/bmesh/intern/bmesh_inline.c index 88dab30a98e..a13c63284e9 100644 --- a/source/blender/bmesh/intern/bmesh_inline.c +++ b/source/blender/bmesh/intern/bmesh_inline.c @@ -8,24 +8,28 @@ BM_INLINE int BM_TestHFlag(const void *element, const int flag) 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; diff --git a/source/blender/bmesh/operators/removedoubles.c b/source/blender/bmesh/operators/removedoubles.c index 5ed4e995551..fcec0c92759 100644 --- a/source/blender/bmesh/operators/removedoubles.c +++ b/source/blender/bmesh/operators/removedoubles.c @@ -94,8 +94,12 @@ void bmesh_weldverts_exec(BMesh *bm, BMOperator *op) 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) { |