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>2019-01-16 07:26:16 +0300
committerCampbell Barton <ideasman42@gmail.com>2019-01-16 07:31:54 +0300
commit7c4803367f5992f6f52e6960b3de3818b3bbd607 (patch)
treea7bea9b3501dd8791ad4af1fb33b6169716e700c /source/blender/bmesh/intern
parentbeaa66bb13a5d801ec10957922b2d90e04ca5d7c (diff)
BMesh: prevent weld-verts bmop creating selected+hidden verts/edges
Related to error exposed by T59640 Would have fixed crash too, but we want to ignore hidden verts.
Diffstat (limited to 'source/blender/bmesh/intern')
-rw-r--r--source/blender/bmesh/intern/bmesh_inline.h10
1 files changed, 10 insertions, 0 deletions
diff --git a/source/blender/bmesh/intern/bmesh_inline.h b/source/blender/bmesh/intern/bmesh_inline.h
index 4b55060875b..db53667e6f1 100644
--- a/source/blender/bmesh/intern/bmesh_inline.h
+++ b/source/blender/bmesh/intern/bmesh_inline.h
@@ -37,6 +37,7 @@
#define BM_elem_flag_set( ele, hflag, val) _bm_elem_flag_set (&(ele)->head, hflag, val)
#define BM_elem_flag_toggle( ele, hflag) _bm_elem_flag_toggle (&(ele)->head, hflag)
#define BM_elem_flag_merge( ele_a, ele_b) _bm_elem_flag_merge (&(ele_a)->head, &(ele_b)->head)
+#define BM_elem_flag_merge_ex( ele_a, ele_b, hflag_and)_bm_elem_flag_merge_ex (&(ele_a)->head, &(ele_b)->head, hflag_and)
#define BM_elem_flag_merge_into(ele, ele_a, ele_b)_bm_elem_flag_merge_into (&(ele)->head, &(ele_a)->head, &(ele_b)->head)
ATTR_WARN_UNUSED_RESULT
@@ -77,6 +78,15 @@ BLI_INLINE void _bm_elem_flag_merge(BMHeader *head_a, BMHeader *head_b)
head_a->hflag = head_b->hflag = head_a->hflag | head_b->hflag;
}
+BLI_INLINE void _bm_elem_flag_merge_ex(BMHeader *head_a, BMHeader *head_b, const char hflag_and)
+{
+ if (((head_a->hflag & head_b->hflag) & hflag_and) == 0) {
+ head_a->hflag &= ~hflag_and;
+ head_b->hflag &= ~hflag_and;
+ }
+ _bm_elem_flag_merge(head_a, head_b);
+}
+
BLI_INLINE void _bm_elem_flag_merge_into(BMHeader *head, const BMHeader *head_a, const BMHeader *head_b)
{
head->hflag = head_a->hflag | head_b->hflag;