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
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2012-08-20 04:11:13 +0400
committerCampbell Barton <ideasman42@gmail.com>2012-08-20 04:11:13 +0400
commit817965613b5e9d4b357e156faae742b3d615264f (patch)
tree78eef4df4df86d5ff5c1527090053faf69f56d81 /source/blender/editors
parentf9258696aacf97741957f01145e8385a8b7963d3 (diff)
added 'Unselected' option to remove doubles, merges selected vertices into unselected ones, but not each other.
Diffstat (limited to 'source/blender/editors')
-rw-r--r--source/blender/editors/mesh/editmesh_tools.c35
1 files changed, 26 insertions, 9 deletions
diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c
index 13c48c7f51d..4b8edb920a1 100644
--- a/source/blender/editors/mesh/editmesh_tools.c
+++ b/source/blender/editors/mesh/editmesh_tools.c
@@ -2042,22 +2042,38 @@ static int edbm_remove_doubles_exec(bContext *C, wmOperator *op)
Object *obedit = CTX_data_edit_object(C);
BMEditMesh *em = BMEdit_FromObject(obedit);
BMOperator bmop;
+ const float mergedist = RNA_float_get(op->ptr, "mergedist");
+ int use_unselected = RNA_boolean_get(op->ptr, "use_unselected");
+ int totvert_orig = em->bm->totvert;
int count;
- EDBM_op_init(em, &bmop, op, "find_doubles verts=%hv dist=%f", BM_ELEM_SELECT, RNA_float_get(op->ptr, "mergedist"));
- BMO_op_exec(em->bm, &bmop);
-
- count = BMO_slot_map_count(em->bm, &bmop, "targetmapout");
+ if (use_unselected) {
+ EDBM_op_init(em, &bmop, op,
+ "automerge verts=%hv dist=%f",
+ BM_ELEM_SELECT, mergedist);
+ BMO_op_exec(em->bm, &bmop);
- if (!EDBM_op_callf(em, op, "weld_verts targetmap=%s", &bmop, "targetmapout")) {
- BMO_op_finish(em->bm, &bmop);
- return OPERATOR_CANCELLED;
+ if (!EDBM_op_finish(em, &bmop, op, TRUE)) {
+ return OPERATOR_CANCELLED;
+ }
}
+ else {
+ EDBM_op_init(em, &bmop, op,
+ "find_doubles verts=%hv dist=%f",
+ BM_ELEM_SELECT, mergedist);
+ BMO_op_exec(em->bm, &bmop);
- if (!EDBM_op_finish(em, &bmop, op, TRUE)) {
- return OPERATOR_CANCELLED;
+ if (!EDBM_op_callf(em, op, "weld_verts targetmap=%s", &bmop, "targetmapout")) {
+ BMO_op_finish(em->bm, &bmop);
+ return OPERATOR_CANCELLED;
+ }
+
+ if (!EDBM_op_finish(em, &bmop, op, TRUE)) {
+ return OPERATOR_CANCELLED;
+ }
}
+ count = totvert_orig - em->bm->totvert;
BKE_reportf(op->reports, RPT_INFO, "Removed %d vert%s", count, (count == 1) ? "ex" : "ices");
EDBM_update_generic(C, em, TRUE);
@@ -2082,6 +2098,7 @@ void MESH_OT_remove_doubles(wmOperatorType *ot)
RNA_def_float(ot->srna, "mergedist", 0.0001f, 0.000001f, 50.0f,
"Merge Distance",
"Minimum distance between elements to merge", 0.00001, 10.0);
+ RNA_def_boolean(ot->srna, "use_unselected", 1, "Unselected", "Merge selected to other unselected vertices");
}
/************************ Vertex Path Operator *************************/