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
path: root/source
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2018-04-20 11:29:28 +0300
committerCampbell Barton <ideasman42@gmail.com>2018-04-20 11:34:48 +0300
commit98422c36abe0792ec44d3e0378faef4b2249940f (patch)
treede61f9565faefb2ffd4d01b3e79ba18e9cf590b0 /source
parent801270f09ddc7af286f4676a6ba479a4111d6f56 (diff)
Edit Mesh: use a single report for remove doubles
Report all doubles removed instead of report per-object. Also correct use_unselected check.
Diffstat (limited to 'source')
-rw-r--r--source/blender/editors/mesh/editmesh_tools.c36
1 files changed, 21 insertions, 15 deletions
diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c
index fb5ffead74e..e5f40938ec8 100644
--- a/source/blender/editors/mesh/editmesh_tools.c
+++ b/source/blender/editors/mesh/editmesh_tools.c
@@ -2578,18 +2578,18 @@ static int edbm_remove_doubles_exec(bContext *C, wmOperator *op)
{
const float threshold = RNA_float_get(op->ptr, "threshold");
const bool use_unselected = RNA_boolean_get(op->ptr, "use_unselected");
- int count;
- char htype_select;
+ int count_multi = 0;
ViewLayer *view_layer = CTX_data_view_layer(C);
uint objects_len = 0;
Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len);
- for (uint ob_index = 0; ob_index < objects_len; ob_index++)
- {
+ for (uint ob_index = 0; ob_index < objects_len; ob_index++) {
Object *obedit = objects[ob_index];
BMEditMesh *em = BKE_editmesh_from_object(obedit);
- if ((em->bm->totvertsel == 0) && (!use_unselected)) {
+
+ /* Selection used as target with 'use_unselected'. */
+ if (em->bm->totvertsel == 0) {
continue;
}
@@ -2597,6 +2597,7 @@ static int edbm_remove_doubles_exec(bContext *C, wmOperator *op)
const int totvert_orig = em->bm->totvert;
/* avoid loosing selection state (select -> tags) */
+ char htype_select;
if (em->selectmode & SCE_SELECT_VERTEX) htype_select = BM_VERT;
else if (em->selectmode & SCE_SELECT_EDGE) htype_select = BM_EDGE;
else htype_select = BM_FACE;
@@ -2607,9 +2608,9 @@ static int edbm_remove_doubles_exec(bContext *C, wmOperator *op)
if (use_unselected) {
EDBM_op_init(
- em, &bmop, op,
- "automerge verts=%hv dist=%f",
- BM_ELEM_SELECT, threshold);
+ em, &bmop, op,
+ "automerge verts=%hv dist=%f",
+ BM_ELEM_SELECT, threshold);
BMO_op_exec(em->bm, &bmop);
if (!EDBM_op_finish(em, &bmop, op, true)) {
@@ -2618,9 +2619,10 @@ static int edbm_remove_doubles_exec(bContext *C, wmOperator *op)
}
else {
EDBM_op_init(
- em, &bmop, op,
- "find_doubles verts=%hv dist=%f",
- BM_ELEM_SELECT, threshold);
+ em, &bmop, op,
+ "find_doubles verts=%hv dist=%f",
+ BM_ELEM_SELECT, threshold);
+
BMO_op_exec(em->bm, &bmop);
if (!EDBM_op_callf(em, op, "weld_verts targetmap=%S", &bmop, "targetmap.out")) {
@@ -2633,17 +2635,21 @@ static int edbm_remove_doubles_exec(bContext *C, wmOperator *op)
}
}
- count = totvert_orig - em->bm->totvert;
- BKE_reportf(op->reports, RPT_INFO, "Removed %d vertices", count);
+ const int count = (totvert_orig - em->bm->totvert);
/* restore selection from tags */
BM_mesh_elem_hflag_enable_test(em->bm, htype_select, BM_ELEM_SELECT, true, true, BM_ELEM_TAG);
EDBM_selectmode_flush(em);
- EDBM_update_generic(em, true, true);
+ if (count) {
+ count_multi += count;
+ EDBM_update_generic(em, true, true);
+ }
}
-
MEM_freeN(objects);
+
+ BKE_reportf(op->reports, RPT_INFO, "Removed %d vertices", count_multi);
+
return OPERATOR_FINISHED;
}