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>2020-08-30 11:49:38 +0300
committerCampbell Barton <ideasman42@gmail.com>2020-08-30 11:53:24 +0300
commitb1b1be1754b9cdf562e7eb1f04404d01ab182a95 (patch)
treef4b10dc11a84d36cde1333103c189b44e2c8bb68 /source/blender/editors/object/object_vgroup.c
parent12bc34b0b81b11186e3814f8a255f1226f0588c3 (diff)
Object: support multiple objects for limit-total vertex groups
Also add this to the "Clean Up" menu.
Diffstat (limited to 'source/blender/editors/object/object_vgroup.c')
-rw-r--r--source/blender/editors/object/object_vgroup.c39
1 files changed, 25 insertions, 14 deletions
diff --git a/source/blender/editors/object/object_vgroup.c b/source/blender/editors/object/object_vgroup.c
index a144632fc5f..6d426313b66 100644
--- a/source/blender/editors/object/object_vgroup.c
+++ b/source/blender/editors/object/object_vgroup.c
@@ -3716,25 +3716,36 @@ void OBJECT_OT_vertex_group_quantize(wmOperatorType *ot)
static int vertex_group_limit_total_exec(bContext *C, wmOperator *op)
{
- Object *ob = ED_object_context(C);
-
const int limit = RNA_int_get(op->ptr, "limit");
- eVGroupSelect subset_type = RNA_enum_get(op->ptr, "group_select_mode");
+ const eVGroupSelect subset_type = RNA_enum_get(op->ptr, "group_select_mode");
+ int remove_multi_count = 0;
- int subset_count, vgroup_tot;
+ uint objects_len;
+ Object **objects = object_array_for_wpaint(C, &objects_len);
+ for (uint ob_index = 0; ob_index < objects_len; ob_index++) {
+ Object *ob = objects[ob_index];
- const bool *vgroup_validmap = BKE_object_defgroup_subset_from_select_type(
- ob, subset_type, &vgroup_tot, &subset_count);
- int remove_tot = vgroup_limit_total_subset(ob, vgroup_validmap, vgroup_tot, subset_count, limit);
- MEM_freeN((void *)vgroup_validmap);
+ int subset_count, vgroup_tot;
+ const bool *vgroup_validmap = BKE_object_defgroup_subset_from_select_type(
+ ob, subset_type, &vgroup_tot, &subset_count);
+ const int remove_count = vgroup_limit_total_subset(
+ ob, vgroup_validmap, vgroup_tot, subset_count, limit);
+ MEM_freeN((void *)vgroup_validmap);
- BKE_reportf(
- op->reports, remove_tot ? RPT_INFO : RPT_WARNING, "%d vertex weights limited", remove_tot);
+ if (remove_count != 0) {
+ DEG_id_tag_update(&ob->id, ID_RECALC_GEOMETRY);
+ WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
+ WM_event_add_notifier(C, NC_GEOM | ND_DATA, ob->data);
+ }
+ remove_multi_count += remove_count;
+ }
+ MEM_freeN(objects);
- if (remove_tot) {
- DEG_id_tag_update(&ob->id, ID_RECALC_GEOMETRY);
- WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
- WM_event_add_notifier(C, NC_GEOM | ND_DATA, ob->data);
+ if (remove_multi_count) {
+ BKE_reportf(op->reports,
+ remove_multi_count ? RPT_INFO : RPT_WARNING,
+ "%d vertex weights limited",
+ remove_multi_count);
return OPERATOR_FINISHED;
}