[Bf-blender-cvs] [1fb43ba8c33] greasepencil-object: GPencil: Add lock icon to Vertex Groups list

Antonioya noreply at git.blender.org
Tue Apr 16 11:27:50 CEST 2019


Commit: 1fb43ba8c3383455fcf340130c92d82a869b39ec
Author: Antonioya
Date:   Tue Apr 16 11:27:36 2019 +0200
Branches: greasepencil-object
https://developer.blender.org/rB1fb43ba8c3383455fcf340130c92d82a869b39ec

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.

===================================================================

M	release/scripts/startup/bl_ui/properties_data_gpencil.py
M	source/blender/editors/gpencil/gpencil_brush.c
M	source/blender/editors/gpencil/gpencil_data.c

===================================================================

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)
 	{



More information about the Bf-blender-cvs mailing list