Fix T84426: Limit dissolve ignores selection with custom normals
Regression in 9969c2dd16
.
Add note that custom normal calculation functions write into to tags.
This commit is contained in:
parent
afc1e3913a
commit
9f6374650a
Notes:
blender-bot
2023-02-14 12:01:57 +01:00
Referenced by issue #84426, odd limited dissolve behavior
|
@ -669,6 +669,9 @@ bool BM_loop_check_cyclic_smooth_fan(BMLoop *l_curr)
|
|||
* BMesh version of BKE_mesh_normals_loop_split() in mesh_evaluate.c
|
||||
* Will use first clnors_data array, and fallback to cd_loop_clnors_offset
|
||||
* (use NULL and -1 to not use clnors).
|
||||
*
|
||||
* \note This sets #BM_ELEM_TAG which is used in tool code (e.g. T84426).
|
||||
* we could add a low-level API flag for this, see #BM_ELEM_API_FLAG_ENABLE and friends.
|
||||
*/
|
||||
static void bm_mesh_loops_calc_normals(BMesh *bm,
|
||||
const float (*vcos)[3],
|
||||
|
@ -1555,6 +1558,10 @@ void BM_lnorspace_rebuild(BMesh *bm, bool preserve_clnor)
|
|||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* \warning This function sets #BM_ELEM_TAG on loops & edges via #bm_mesh_loops_calc_normals,
|
||||
* take care to run this before setting up tags.
|
||||
*/
|
||||
void BM_lnorspace_update(BMesh *bm)
|
||||
{
|
||||
if (bm->lnor_spacearr == NULL) {
|
||||
|
@ -1889,6 +1896,10 @@ void BM_loop_normal_editdata_array_free(BMLoopNorEditDataArray *lnors_ed_arr)
|
|||
MEM_freeN(lnors_ed_arr);
|
||||
}
|
||||
|
||||
/**
|
||||
* \warning This function sets #BM_ELEM_TAG on loops & edges via #bm_mesh_loops_calc_normals,
|
||||
* take care to run this before setting up tags.
|
||||
*/
|
||||
bool BM_custom_loop_normals_to_vector_layer(BMesh *bm)
|
||||
{
|
||||
BMFace *f;
|
||||
|
|
|
@ -1791,6 +1791,8 @@ static bool edbm_edge_split_selected_verts(wmOperator *op, Object *obedit, BMEdi
|
|||
return false;
|
||||
}
|
||||
|
||||
BM_custom_loop_normals_to_vector_layer(em->bm);
|
||||
|
||||
/* Flush from vertices to edges. */
|
||||
BMIter iter;
|
||||
BMEdge *eed;
|
||||
|
@ -1810,8 +1812,6 @@ static bool edbm_edge_split_selected_verts(wmOperator *op, Object *obedit, BMEdi
|
|||
}
|
||||
}
|
||||
|
||||
BM_custom_loop_normals_to_vector_layer(em->bm);
|
||||
|
||||
if (!EDBM_op_callf(em,
|
||||
op,
|
||||
"split_edges edges=%he verts=%hv use_verts=%b",
|
||||
|
@ -5979,6 +5979,8 @@ static int edbm_dissolve_limited_exec(bContext *C, wmOperator *op)
|
|||
continue;
|
||||
}
|
||||
|
||||
BM_custom_loop_normals_to_vector_layer(em->bm);
|
||||
|
||||
if (em->selectmode == SCE_SELECT_FACE) {
|
||||
/* flush selection to tags and untag edges/verts with partially selected faces */
|
||||
BMIter iter;
|
||||
|
@ -6010,8 +6012,6 @@ static int edbm_dissolve_limited_exec(bContext *C, wmOperator *op)
|
|||
dissolve_flag = BM_ELEM_SELECT;
|
||||
}
|
||||
|
||||
BM_custom_loop_normals_to_vector_layer(em->bm);
|
||||
|
||||
EDBM_op_call_and_selectf(
|
||||
em,
|
||||
op,
|
||||
|
|
Loading…
Reference in New Issue