diff options
author | Sebastian Parborg <darkdefende@gmail.com> | 2020-07-14 18:26:13 +0300 |
---|---|---|
committer | Sebastian Parborg <darkdefende@gmail.com> | 2020-07-14 18:27:48 +0300 |
commit | 2ba1cf4b40fc2ec92c1ef2ad17df70ed8859a1b0 (patch) | |
tree | dd4dc37ed43617cc045e7dda90bb40045299cedb /source/blender/editors/mesh | |
parent | 797027be6b94c2146c3cf76e56a419fef45f550d (diff) |
Fix T78880: UV Editor - Match prop edit connected behavior with mesh editing and fix Rip Region double proportional checkbox
This fixes the double prop edit checkbox in the redo menu.
This also makes it so that proportional edit in connected mode now
matches how it behaves in mesh edit mode.
Without this change, ripping in UV edit mode with proportional edit on
would be useless as the UV verts you ripped will still be stuck together
even if they were not connected anymore.
Reviewed By: Campbell
Differential Revision: http://developer.blender.org/D8289
Diffstat (limited to 'source/blender/editors/mesh')
-rw-r--r-- | source/blender/editors/mesh/editmesh_utils.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/source/blender/editors/mesh/editmesh_utils.c b/source/blender/editors/mesh/editmesh_utils.c index 2f0969402ef..0cc4dcef442 100644 --- a/source/blender/editors/mesh/editmesh_utils.c +++ b/source/blender/editors/mesh/editmesh_utils.c @@ -778,6 +778,7 @@ UvElementMap *BM_uv_element_map_create(BMesh *bm, UvElement *newvlist = NULL, *vlist = element_map->vert[i]; UvElement *iterv, *v, *lastv, *next; float *uv, *uv2, uvdiff[2]; + bool uv_vert_sel, uv2_vert_sel; while (vlist) { v = vlist; @@ -788,6 +789,7 @@ UvElementMap *BM_uv_element_map_create(BMesh *bm, l = v->l; luv = BM_ELEM_CD_GET_VOID_P(l, cd_loop_uv_offset); uv = luv->uv; + uv_vert_sel = luv->flag & MLOOPUV_VERTSEL; lastv = NULL; iterv = vlist; @@ -798,12 +800,17 @@ UvElementMap *BM_uv_element_map_create(BMesh *bm, l = iterv->l; luv = BM_ELEM_CD_GET_VOID_P(l, cd_loop_uv_offset); uv2 = luv->uv; + uv2_vert_sel = luv->flag & MLOOPUV_VERTSEL; sub_v2_v2v2(uvdiff, uv2, uv); - if (fabsf(uvdiff[0]) < STD_UV_CONNECT_LIMIT && fabsf(uvdiff[1]) < STD_UV_CONNECT_LIMIT && - (!use_winding || - winding[BM_elem_index_get(iterv->l->f)] == winding[BM_elem_index_get(v->l->f)])) { + /* Check if the uv loops share the same selection state (if not, they are not connected as + * they have been ripped or other edit commands have seperated them). */ + bool connected = uv_vert_sel == uv2_vert_sel && fabsf(uvdiff[0]) < STD_UV_CONNECT_LIMIT && + fabsf(uvdiff[1]) < STD_UV_CONNECT_LIMIT; + + if (connected && (!use_winding || winding[BM_elem_index_get(iterv->l->f)] == + winding[BM_elem_index_get(v->l->f)])) { if (lastv) { lastv->next = next; } |