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.
This commit is contained in:
parent
beaa66bb13
commit
7c4803367f
|
@ -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;
|
||||
|
|
|
@ -202,7 +202,7 @@ void bmo_weld_verts_exec(BMesh *bm, BMOperator *op)
|
|||
BMO_vert_flag_enable(bm, v1, ELE_DEL);
|
||||
|
||||
/* merge the vertex flags, else we get randomly selected/unselected verts */
|
||||
BM_elem_flag_merge(v1, v2);
|
||||
BM_elem_flag_merge_ex(v1, v2, BM_ELEM_HIDDEN);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -231,7 +231,7 @@ void bmo_weld_verts_exec(BMesh *bm, BMOperator *op)
|
|||
if (e_new == NULL) {
|
||||
e_new = BM_edge_create(bm, v1, v2, e, BM_CREATE_NOP);
|
||||
}
|
||||
BM_elem_flag_merge(e_new, e);
|
||||
BM_elem_flag_merge_ex(e_new, e, BM_ELEM_HIDDEN);
|
||||
}
|
||||
|
||||
BMO_edge_flag_enable(bm, e, ELE_DEL);
|
||||
|
|
Loading…
Reference in New Issue