GPencil: Add lock icon to Vertex Groups list

Also check this flag in operators.

Note: This is required for the development of the new Normalize All operator.
This commit is contained in:
Antonioya
2019-04-16 11:27:36 +02:00
parent a8852ade8a
commit 5494926ee5
3 changed files with 40 additions and 13 deletions

View File

@@ -342,8 +342,8 @@ class GPENCIL_UL_vgroups(UIList):
vgroup = item
if self.layout_type in {'DEFAULT', 'COMPACT'}:
layout.prop(vgroup, "name", text="", emboss=False, icon_value=icon)
# icon = 'LOCKED' if vgroup.lock_weight else 'UNLOCKED'
# layout.prop(vgroup, "lock_weight", text="", icon=icon, emboss=False)
icon = 'LOCKED' if vgroup.lock_weight else 'UNLOCKED'
layout.prop(vgroup, "lock_weight", text="", icon=icon, emboss=False)
elif self.layout_type == 'GRID':
layout.alignment = 'CENTER'
layout.label(text="", icon_value=icon)

View File

@@ -929,6 +929,12 @@ static bool gp_brush_weight_apply(
gso->vrgroup = 0;
}
}
else {
bDeformGroup *defgroup = BLI_findlink(&gso->object->defbase, gso->vrgroup);
if (defgroup->flag & DG_LOCK_WEIGHT) {
return false;
}
}
/* get current weight */
MDeformWeight *dw = defvert_verify_index(dvert, gso->vrgroup);
float curweight = dw ? dw->weight : 0.0f;

View File

@@ -1725,19 +1725,26 @@ void GPENCIL_OT_vertex_group_deselect(wmOperatorType *ot)
}
/* invert */
static int gpencil_vertex_group_invert_exec(bContext *C, wmOperator *UNUSED(op))
static int gpencil_vertex_group_invert_exec(bContext *C, wmOperator *op)
{
ToolSettings *ts = CTX_data_tool_settings(C);
Object *ob = CTX_data_active_object(C);
/* sanity checks */
if (ELEM(NULL, ts, ob, ob->data))
if (ELEM(NULL, ts, ob, ob->data)) {
return OPERATOR_CANCELLED;
}
MDeformVert *dvert;
const int def_nr = ob->actdef - 1;
if (!BLI_findlink(&ob->defbase, def_nr))
bDeformGroup *defgroup = BLI_findlink(&ob->defbase, def_nr);
if (defgroup == NULL) {
return OPERATOR_CANCELLED;
}
if (defgroup->flag & DG_LOCK_WEIGHT) {
BKE_report(op->reports, RPT_ERROR, "Current Vertex Group is locked");
return OPERATOR_CANCELLED;
}
CTX_DATA_BEGIN(C, bGPDstroke *, gps, editable_gpencil_strokes)
{
@@ -1790,16 +1797,23 @@ static int gpencil_vertex_group_smooth_exec(bContext *C, wmOperator *op)
Object *ob = CTX_data_active_object(C);
/* sanity checks */
if (ELEM(NULL, ts, ob, ob->data))
if (ELEM(NULL, ts, ob, ob->data)) {
return OPERATOR_CANCELLED;
}
const int def_nr = ob->actdef - 1;
bDeformGroup *defgroup = BLI_findlink(&ob->defbase, def_nr);
if (defgroup == NULL) {
return OPERATOR_CANCELLED;
}
if (defgroup->flag & DG_LOCK_WEIGHT) {
BKE_report(op->reports, RPT_ERROR, "Current Vertex Group is locked");
return OPERATOR_CANCELLED;
}
bGPDspoint *pta, *ptb, *ptc;
MDeformVert *dverta, *dvertb;
const int def_nr = ob->actdef - 1;
if (!BLI_findlink(&ob->defbase, def_nr))
return OPERATOR_CANCELLED;
CTX_DATA_BEGIN(C, bGPDstroke *, gps, editable_gpencil_strokes)
{
if (gps->dvert == NULL) {
@@ -1874,19 +1888,26 @@ void GPENCIL_OT_vertex_group_smooth(wmOperatorType *ot)
}
/* normalize */
static int gpencil_vertex_group_normalize_exec(bContext *C, wmOperator *UNUSED(op))
static int gpencil_vertex_group_normalize_exec(bContext *C, wmOperator *op)
{
ToolSettings *ts = CTX_data_tool_settings(C);
Object *ob = CTX_data_active_object(C);
/* sanity checks */
if (ELEM(NULL, ts, ob, ob->data))
if (ELEM(NULL, ts, ob, ob->data)) {
return OPERATOR_CANCELLED;
}
MDeformVert *dvert;
const int def_nr = ob->actdef - 1;
if (!BLI_findlink(&ob->defbase, def_nr))
bDeformGroup *defgroup = BLI_findlink(&ob->defbase, def_nr);
if (defgroup == NULL) {
return OPERATOR_CANCELLED;
}
if (defgroup->flag & DG_LOCK_WEIGHT) {
BKE_report(op->reports, RPT_ERROR, "Current Vertex Group is locked");
return OPERATOR_CANCELLED;
}
CTX_DATA_BEGIN(C, bGPDstroke *, gps, editable_gpencil_strokes)
{