Animation: Weight Paint select more/less for vertices #105633

Merged
Christoph Lendenfeld merged 14 commits from ChrisLend/blender:weight_paint_grow_sel_vert into main 2023-03-31 14:48:09 +02:00
3 changed files with 18 additions and 11 deletions
Showing only changes of commit 9527c6a325 - Show all commits

View File

@ -445,7 +445,7 @@ void paintvert_select_linked_pick(struct bContext *C,
const int region_coordinates[2], const int region_coordinates[2],
bool select); bool select);
void paintvert_select_more(struct Mesh *mesh, bool face_step); void paintvert_select_more(struct Mesh *mesh, bool face_step);
void paintvert_select_less(struct bContext *C, struct Object *ob, bool face_step); void paintvert_select_less(struct Mesh *mesh, bool face_step);
void paintvert_hide(struct bContext *C, struct Object *ob, bool unselected); void paintvert_hide(struct bContext *C, struct Object *ob, bool unselected);
void paintvert_reveal(struct bContext *C, struct Object *ob, bool select); void paintvert_reveal(struct bContext *C, struct Object *ob, bool select);

View File

@ -714,13 +714,9 @@ void paintvert_select_more(Mesh *mesh, const bool face_step)
select_vert.finish(); select_vert.finish();
} }
void paintvert_select_less(bContext *C, Object *ob, const bool face_step) void paintvert_select_less(Mesh *mesh, const bool face_step)
{ {
using namespace blender; using namespace blender;
Mesh *mesh = BKE_mesh_from_object(ob);
if (mesh == nullptr || mesh->totpoly == 0) {
return;
}
bke::MutableAttributeAccessor attributes = mesh->attributes_for_write(); bke::MutableAttributeAccessor attributes = mesh->attributes_for_write();
bke::SpanAttributeWriter<bool> select_vert = attributes.lookup_or_add_for_write_span<bool>( bke::SpanAttributeWriter<bool> select_vert = attributes.lookup_or_add_for_write_span<bool>(
@ -735,7 +731,7 @@ void paintvert_select_less(bContext *C, Object *ob, const bool face_step)
const Span<MEdge> edges = mesh->edges(); const Span<MEdge> edges = mesh->edges();
MeshElemMap *edge_poly_map; MeshElemMap *edge_poly_map;
int *edge_poly_mem; int *edge_poly_mem = nullptr;
if (face_step) { if (face_step) {
BKE_mesh_edge_poly_map_create(&edge_poly_map, BKE_mesh_edge_poly_map_create(&edge_poly_map,
&edge_poly_mem, &edge_poly_mem,
@ -774,10 +770,11 @@ void paintvert_select_less(bContext *C, Object *ob, const bool face_step)
} }
} }
} }
if (edge_poly_mem) {
MEM_freeN(edge_poly_map);
MEM_freeN(edge_poly_mem);
}
select_vert.finish(); select_vert.finish();
paintvert_flush_flags(ob);
paintvert_tag_select_update(C, ob);
} }
void paintvert_tag_select_update(bContext *C, Object *ob) void paintvert_tag_select_update(bContext *C, Object *ob)

View File

@ -831,9 +831,19 @@ void PAINT_OT_vert_select_more(wmOperatorType *ot)
static int paintvert_select_less_exec(bContext *C, wmOperator *op) static int paintvert_select_less_exec(bContext *C, wmOperator *op)
{ {
Object *ob = CTX_data_active_object(C);
Mesh *mesh = BKE_mesh_from_object(ob);
if (mesh == NULL || mesh->totpoly == 0) {
return OPERATOR_CANCELLED;
}
const bool face_step = RNA_boolean_get(op->ptr, "face_step"); const bool face_step = RNA_boolean_get(op->ptr, "face_step");
paintvert_select_less(C, CTX_data_active_object(C), face_step); paintvert_select_less(mesh, face_step);
paintvert_flush_flags(ob);
paintvert_tag_select_update(C, ob);
ED_region_tag_redraw(CTX_wm_region(C)); ED_region_tag_redraw(CTX_wm_region(C));
return OPERATOR_FINISHED; return OPERATOR_FINISHED;
} }