Fix #106354: Account for hidden vertices in weight gradient operator #106417

Merged
YimingWu merged 2 commits from ChengduLittleA/blender:weight_grad_fix into main 2023-05-02 09:05:34 +02:00
1 changed files with 9 additions and 0 deletions

View File

@ -19,6 +19,7 @@
#include "RNA_define.h"
#include "RNA_enum_types.h"
#include "BKE_attribute.hh"
#include "BKE_brush.h"
#include "BKE_colortools.h"
#include "BKE_context.h"
@ -592,6 +593,7 @@ struct WPGradient_userData {
Mesh *me;
MDeformVert *dvert;
const bool *select_vert;
blender::VArray<bool> hide_vert;
Brush *brush;
const float *sco_start; /* [2] */
const float *sco_end; /* [2] */
@ -678,6 +680,10 @@ static void gradientVertUpdate__mapFunc(void *userData,
return;
}
if (grad_data->hide_vert[index]) {
return;
}
gradientVert_update(grad_data, index);
}
@ -815,12 +821,15 @@ static int paint_weight_gradient_exec(bContext *C, wmOperator *op)
__func__));
}
const blender::bke::AttributeAccessor attributes = me->attributes();
data.region = region;
data.scene = scene;
data.me = me;
data.dvert = dverts;
data.select_vert = (const bool *)CustomData_get_layer_named(
&me->vdata, CD_PROP_BOOL, ".select_vert");
data.hide_vert = attributes.lookup_or_default<bool>(".hide_vert", ATTR_DOMAIN_POINT, false);
data.sco_start = sco_start;
data.sco_end = sco_end;
data.sco_line_div = 1.0f / len_v2v2(sco_start, sco_end);