[Bf-blender-cvs] [feb0b0ddecd] greasepencil-object: Fix opacity modifier using vertex group

Antonio Vazquez noreply at git.blender.org
Fri Dec 22 20:02:36 CET 2017


Commit: feb0b0ddecd88d401c03752f6487b74e33925a7b
Author: Antonio Vazquez
Date:   Fri Dec 22 20:02:08 2017 +0100
Branches: greasepencil-object
https://developer.blender.org/rBfeb0b0ddecd88d401c03752f6487b74e33925a7b

Fix opacity modifier using vertex group

Changes in how the vertex group is used in modifier.

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

M	source/blender/modifiers/intern/MOD_gpencilopacity.c

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

diff --git a/source/blender/modifiers/intern/MOD_gpencilopacity.c b/source/blender/modifiers/intern/MOD_gpencilopacity.c
index 8175352a413..dfe89209fa8 100644
--- a/source/blender/modifiers/intern/MOD_gpencilopacity.c
+++ b/source/blender/modifiers/intern/MOD_gpencilopacity.c
@@ -68,6 +68,8 @@ static void deformStroke(ModifierData *md, const EvaluationContext *UNUSED(eval_
 {
 	GpencilOpacityModifierData *mmd = (GpencilOpacityModifierData *)md;
 	int vindex = defgroup_name_index(ob, mmd->vgname);
+	bGPDspoint *pt;
+	float weight;
 
 	if (!is_stroke_affected_by_modifier(
 	        mmd->layername, mmd->pass_index, 3, gpl, gps,
@@ -76,9 +78,6 @@ static void deformStroke(ModifierData *md, const EvaluationContext *UNUSED(eval_
 		return;
 	}
 
-	gps->palcolor->rgb[3] = gps->palcolor->rgb[3] * mmd->factor;
-	gps->palcolor->fill[3] = gps->palcolor->fill[3] * mmd->factor;
-
 	/* if factor is > 1, then force opacity */
 	if (mmd->factor > 1.0f) {
 		gps->palcolor->rgb[3] += mmd->factor - 1.0f;
@@ -87,26 +86,43 @@ static void deformStroke(ModifierData *md, const EvaluationContext *UNUSED(eval_
 		}
 	}
 
-
 	CLAMP(gps->palcolor->rgb[3], 0.0f, 1.0f);
 	CLAMP(gps->palcolor->fill[3], 0.0f, 1.0f);
 
 	/* if opacity > 1.0, affect the strength of the stroke */
 	if (mmd->factor > 1.0f) {
 		for (int i = 0; i < gps->totpoints; i++) {
-			bGPDspoint *pt = &gps->points[i];
+			pt = &gps->points[i];
 			
 			/* verify vertex group */
-			float weight = is_point_affected_by_modifier(pt, (int)(!(mmd->flag & GP_OPACITY_INVERSE_VGROUP) == 0), vindex);
+			weight = is_point_affected_by_modifier(pt, (int)(!(mmd->flag & GP_OPACITY_INVERSE_VGROUP) == 0), vindex);
 			if (weight < 0) {
 				pt->strength += mmd->factor - 1.0f;
 			}
 			else {
-				pt->strength += ((mmd->factor * weight) - 1.0f);
+				pt->strength += (mmd->factor - 1.0f) * weight;
+			}
+			CLAMP(pt->strength, 0.0f, 1.0f);
+		}
+	}
+	else {
+		for (int i = 0; i < gps->totpoints; i++) {
+			pt = &gps->points[i];
+
+			/* verify vertex group */
+			if (mmd->vgname == NULL) {
+				pt->strength *= mmd->factor;
+			}
+			else {
+				weight = is_point_affected_by_modifier(pt, (int)(!(mmd->flag & GP_OPACITY_INVERSE_VGROUP) == 0), vindex);
+				if (weight >= 0) {
+					pt->strength *= mmd->factor * weight;
+				}
 			}
 			CLAMP(pt->strength, 0.0f, 1.0f);
 		}
 	}
+
 }
 
 static void bakeModifierGP(const bContext *UNUSED(C), const EvaluationContext *eval_ctx,



More information about the Bf-blender-cvs mailing list