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

Weight gradient operator didn't respect hidden vertices. Now fixed.

Pull Request: https://projects.blender.org/blender/blender/pulls/106417
This commit is contained in:
YimingWu
2023-05-02 09:05:26 +02:00
committed by YimingWu
parent 2483c19ad3
commit 0a0a29887d

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"
@@ -593,6 +594,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] */
@@ -680,6 +682,10 @@ static void gradientVertUpdate__mapFunc(void *userData,
return;
}
if (grad_data->hide_vert[index]) {
return;
}
gradientVert_update(grad_data, index);
}
@@ -818,12 +824,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);