Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2011-09-09 07:34:48 +0400
committerCampbell Barton <ideasman42@gmail.com>2011-09-09 07:34:48 +0400
commit7b637dc1670dcb1fd1749ab0136311054dabbf27 (patch)
tree685c4360b904a1f357fe41fa49bbf5bcfe856f29 /source/blender
parentfa59b801898c807d958e131c6b3ae032dc0b0e38 (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.h1
-rw-r--r--source/blender/bmesh/intern/bmesh_inline.c10
-rw-r--r--source/blender/bmesh/operators/removedoubles.c6
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) {