From 5494926ee564dcde052e875debb90e27c60cd6aa Mon Sep 17 00:00:00 2001 From: Antonioya Date: Tue, 16 Apr 2019 11:27:36 +0200 Subject: 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. --- .../startup/bl_ui/properties_data_gpencil.py | 4 +- source/blender/editors/gpencil/gpencil_brush.c | 6 +++ source/blender/editors/gpencil/gpencil_data.c | 43 ++++++++++++++++------ 3 files changed, 40 insertions(+), 13 deletions(-) diff --git a/release/scripts/startup/bl_ui/properties_data_gpencil.py b/release/scripts/startup/bl_ui/properties_data_gpencil.py index 0348b2452da..5d11373b2e9 100644 --- a/release/scripts/startup/bl_ui/properties_data_gpencil.py +++ b/release/scripts/startup/bl_ui/properties_data_gpencil.py @@ -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) diff --git a/source/blender/editors/gpencil/gpencil_brush.c b/source/blender/editors/gpencil/gpencil_brush.c index e7e6d7a5f7f..8f64ec1c868 100644 --- a/source/blender/editors/gpencil/gpencil_brush.c +++ b/source/blender/editors/gpencil/gpencil_brush.c @@ -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; diff --git a/source/blender/editors/gpencil/gpencil_data.c b/source/blender/editors/gpencil/gpencil_data.c index 81da4ab8bc9..52c4354697e 100644 --- a/source/blender/editors/gpencil/gpencil_data.c +++ b/source/blender/editors/gpencil/gpencil_data.c @@ -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,15 +1797,22 @@ 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; - - bGPDspoint *pta, *ptb, *ptc; - MDeformVert *dverta, *dvertb; + } 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; + } + + bGPDspoint *pta, *ptb, *ptc; + MDeformVert *dverta, *dvertb; CTX_DATA_BEGIN(C, bGPDstroke *, gps, editable_gpencil_strokes) { @@ -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) { -- cgit v1.2.3