Edit Mesh: skip normals to vector with unselected meshes for "Delete"

Meshes with unselected elements are skipped but still called
BM_custom_loop_normals_to_vector_layer.
This commit is contained in:
Campbell Barton 2021-08-17 17:11:00 +10:00
parent 6baa62245f
commit 4443831c6b
1 changed files with 28 additions and 18 deletions

View File

@ -467,40 +467,50 @@ static int edbm_delete_exec(bContext *C, wmOperator *op)
BMEditMesh *em = BKE_editmesh_from_object(obedit);
const int type = RNA_enum_get(op->ptr, "type");
BM_custom_loop_normals_to_vector_layer(em->bm);
switch (type) {
case MESH_DELETE_VERT: /* Erase Vertices */
if (!(em->bm->totvertsel &&
EDBM_op_callf(em, op, "delete geom=%hv context=%i", BM_ELEM_SELECT, DEL_VERTS))) {
if (em->bm->totvertsel == 0) {
continue;
}
BM_custom_loop_normals_to_vector_layer(em->bm);
if (!EDBM_op_callf(em, op, "delete geom=%hv context=%i", BM_ELEM_SELECT, DEL_VERTS)) {
continue;
}
break;
case MESH_DELETE_EDGE: /* Erase Edges */
if (!(em->bm->totedgesel &&
EDBM_op_callf(em, op, "delete geom=%he context=%i", BM_ELEM_SELECT, DEL_EDGES))) {
if (em->bm->totedgesel == 0) {
continue;
}
BM_custom_loop_normals_to_vector_layer(em->bm);
if (!EDBM_op_callf(em, op, "delete geom=%he context=%i", BM_ELEM_SELECT, DEL_EDGES)) {
continue;
}
break;
case MESH_DELETE_FACE: /* Erase Faces */
if (!(em->bm->totfacesel &&
EDBM_op_callf(em, op, "delete geom=%hf context=%i", BM_ELEM_SELECT, DEL_FACES))) {
if (em->bm->totfacesel == 0) {
continue;
}
BM_custom_loop_normals_to_vector_layer(em->bm);
if (!EDBM_op_callf(em, op, "delete geom=%hf context=%i", BM_ELEM_SELECT, DEL_FACES)) {
continue;
}
break;
case MESH_DELETE_EDGE_FACE:
/* Edges and Faces */
if (!((em->bm->totedgesel || em->bm->totfacesel) &&
EDBM_op_callf(
em, op, "delete geom=%hef context=%i", BM_ELEM_SELECT, DEL_EDGESFACES))) {
case MESH_DELETE_EDGE_FACE: /* Edges and Faces */
if ((em->bm->totedgesel == 0) && (em->bm->totfacesel == 0)) {
continue;
}
BM_custom_loop_normals_to_vector_layer(em->bm);
if (!EDBM_op_callf(
em, op, "delete geom=%hef context=%i", BM_ELEM_SELECT, DEL_EDGESFACES)) {
continue;
}
break;
case MESH_DELETE_ONLY_FACE:
/* Only faces. */
if (!(em->bm->totfacesel &&
EDBM_op_callf(
em, op, "delete geom=%hf context=%i", BM_ELEM_SELECT, DEL_ONLYFACES))) {
case MESH_DELETE_ONLY_FACE: /* Only faces. */
if (em->bm->totfacesel == 0) {
continue;
}
BM_custom_loop_normals_to_vector_layer(em->bm);
if (!EDBM_op_callf(em, op, "delete geom=%hf context=%i", BM_ELEM_SELECT, DEL_ONLYFACES)) {
continue;
}
break;