Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorCharlie Jolly <mistajolly@gmail.com>2018-08-09 14:42:02 +0300
committerAntonioya <blendergit@gmail.com>2018-08-09 14:43:21 +0300
commit2e10c658f42a842404f16a1b03ff4844e41d538c (patch)
treeefde511079a2e4537477c1da3f5b202982bc4780 /source
parentf284821bf714cca98d86ede1e2a9713094d1d686 (diff)
GP: Add option to select color affected in modifiers
Now it's possible to define if the Tint, Hue and OPacity modifier affect the stroke color, fill color or both.
Diffstat (limited to 'source')
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpencilcolor.c21
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c22
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpenciltint.c23
-rw-r--r--source/blender/makesdna/DNA_gpencil_modifier_types.h14
-rw-r--r--source/blender/makesrna/intern/rna_gpencil_modifier.c22
5 files changed, 75 insertions, 27 deletions
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilcolor.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilcolor.c
index 4c087577699..40ffe293d41 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilcolor.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilcolor.c
@@ -60,6 +60,7 @@ static void initData(GpencilModifierData *md)
ARRAY_SET_ITEMS(gpmd->hsv, 1.0f, 1.0f, 1.0f);
gpmd->layername[0] = '\0';
gpmd->flag |= GP_COLOR_CREATE_COLORS;
+ gpmd->modify_color = GP_MODIFY_COLOR_BOTH;
}
static void copyData(const GpencilModifierData *md, GpencilModifierData *target)
@@ -86,15 +87,19 @@ static void deformStroke(
copy_v3_v3(factor, mmd->hsv);
add_v3_fl(factor, -1.0f);
- rgb_to_hsv_v(gps->runtime.tmp_stroke_rgba, hsv);
- add_v3_v3(hsv, factor);
- CLAMP3(hsv, 0.0f, 1.0f);
- hsv_to_rgb_v(hsv, gps->runtime.tmp_stroke_rgba);
+ if (mmd->modify_color != GP_MODIFY_COLOR_FILL) {
+ rgb_to_hsv_v(gps->runtime.tmp_stroke_rgba, hsv);
+ add_v3_v3(hsv, factor);
+ CLAMP3(hsv, 0.0f, 1.0f);
+ hsv_to_rgb_v(hsv, gps->runtime.tmp_stroke_rgba);
+ }
- rgb_to_hsv_v(gps->runtime.tmp_fill_rgba, hsv);
- add_v3_v3(hsv, factor);
- CLAMP3(hsv, 0.0f, 1.0f);
- hsv_to_rgb_v(hsv, gps->runtime.tmp_fill_rgba);
+ if (mmd->modify_color != GP_MODIFY_COLOR_STROKE) {
+ rgb_to_hsv_v(gps->runtime.tmp_fill_rgba, hsv);
+ add_v3_v3(hsv, factor);
+ CLAMP3(hsv, 0.0f, 1.0f);
+ hsv_to_rgb_v(hsv, gps->runtime.tmp_fill_rgba);
+ }
}
static void bakeModifier(
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c
index 541b37523b2..e0484e19959 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c
@@ -61,6 +61,7 @@ static void initData(GpencilModifierData *md)
gpmd->layername[0] = '\0';
gpmd->vgname[0] = '\0';
gpmd->flag |= GP_OPACITY_CREATE_COLORS;
+ gpmd->modify_color = GP_MODIFY_COLOR_BOTH;
}
static void copyData(const GpencilModifierData *md, GpencilModifierData *target)
@@ -84,19 +85,24 @@ static void deformStroke(
return;
}
- gps->runtime.tmp_fill_rgba[3] *= mmd->factor;
+ if (mmd->modify_color != GP_MODIFY_COLOR_FILL) {
+ gps->runtime.tmp_stroke_rgba[3] *= mmd->factor;
+ /* if factor is > 1, then force opacity */
+ if (mmd->factor > 1.0f) {
+ gps->runtime.tmp_stroke_rgba[3] += mmd->factor - 1.0f;
+ }
+ CLAMP(gps->runtime.tmp_stroke_rgba[3], 0.0f, 1.0f);
+ }
- /* if factor is > 1, then force opacity */
- if (mmd->factor > 1.0f) {
- gps->runtime.tmp_stroke_rgba[3] += mmd->factor - 1.0f;
- if (gps->runtime.tmp_fill_rgba[3] > 1e-5) {
+ if (mmd->modify_color != GP_MODIFY_COLOR_STROKE) {
+ gps->runtime.tmp_fill_rgba[3] *= mmd->factor;
+ /* if factor is > 1, then force opacity */
+ if (mmd->factor > 1.0f && gps->runtime.tmp_fill_rgba[3] > 1e-5) {
gps->runtime.tmp_fill_rgba[3] += mmd->factor - 1.0f;
}
+ CLAMP(gps->runtime.tmp_fill_rgba[3], 0.0f, 1.0f);
}
- CLAMP(gps->runtime.tmp_stroke_rgba[3], 0.0f, 1.0f);
- CLAMP(gps->runtime.tmp_fill_rgba[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++) {
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpenciltint.c b/source/blender/gpencil_modifiers/intern/MOD_gpenciltint.c
index 06212451d48..8af9ff6eec8 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpenciltint.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpenciltint.c
@@ -60,6 +60,7 @@ static void initData(GpencilModifierData *md)
gpmd->layername[0] = '\0';
ARRAY_SET_ITEMS(gpmd->rgb, 1.0f, 1.0f, 1.0f);
gpmd->flag |= GP_TINT_CREATE_COLORS;
+ gpmd->modify_color = GP_MODIFY_COLOR_BOTH;
}
static void copyData(const GpencilModifierData *md, GpencilModifierData *target)
@@ -81,20 +82,24 @@ static void deformStroke(
return;
}
- interp_v3_v3v3(gps->runtime.tmp_stroke_rgba, gps->runtime.tmp_stroke_rgba, mmd->rgb, mmd->factor);
- interp_v3_v3v3(gps->runtime.tmp_fill_rgba, gps->runtime.tmp_fill_rgba, mmd->rgb, mmd->factor);
+ if (mmd->modify_color != GP_MODIFY_COLOR_FILL) {
+ interp_v3_v3v3(gps->runtime.tmp_stroke_rgba, gps->runtime.tmp_stroke_rgba, mmd->rgb, mmd->factor);
+ /* if factor is > 1, the alpha must be changed to get full tint */
+ if (mmd->factor > 1.0f) {
+ gps->runtime.tmp_stroke_rgba[3] += mmd->factor - 1.0f;
+ }
+ CLAMP4(gps->runtime.tmp_stroke_rgba, 0.0f, 1.0f);
+ }
- /* if factor is > 1, the alpha must be changed to get full tint */
- if (mmd->factor > 1.0f) {
- gps->runtime.tmp_stroke_rgba[3] += mmd->factor - 1.0f;
- if (gps->runtime.tmp_fill_rgba[3] > 1e-5) {
+ if (mmd->modify_color != GP_MODIFY_COLOR_STROKE) {
+ interp_v3_v3v3(gps->runtime.tmp_fill_rgba, gps->runtime.tmp_fill_rgba, mmd->rgb, mmd->factor);
+ /* if factor is > 1, the alpha must be changed to get full tint */
+ if (mmd->factor > 1.0f && gps->runtime.tmp_fill_rgba[3] > 1e-5) {
gps->runtime.tmp_fill_rgba[3] += mmd->factor - 1.0f;
}
+ CLAMP4(gps->runtime.tmp_fill_rgba, 0.0f, 1.0f);
}
- CLAMP4(gps->runtime.tmp_stroke_rgba, 0.0f, 1.0f);
- CLAMP4(gps->runtime.tmp_fill_rgba, 0.0f, 1.0f);
-
/* if factor > 1.0, affect the strength of the stroke */
if (mmd->factor > 1.0f) {
for (int i = 0; i < gps->totpoints; i++) {
diff --git a/source/blender/makesdna/DNA_gpencil_modifier_types.h b/source/blender/makesdna/DNA_gpencil_modifier_types.h
index c1e2244427e..ae3621576f2 100644
--- a/source/blender/makesdna/DNA_gpencil_modifier_types.h
+++ b/source/blender/makesdna/DNA_gpencil_modifier_types.h
@@ -138,6 +138,12 @@ typedef enum eThickGpencil_Flag {
GP_THICK_NORMALIZE = (1 << 4),
} eThickGpencil_Flag;
+typedef enum eModifyColorGpencil_Flag {
+ GP_MODIFY_COLOR_BOTH = 0,
+ GP_MODIFY_COLOR_STROKE = 1,
+ GP_MODIFY_COLOR_FILL = 2
+} eModifyColorGpencil_Flag;
+
typedef struct TintGpencilModifierData {
GpencilModifierData modifier;
char layername[64]; /* layer name */
@@ -145,6 +151,8 @@ typedef struct TintGpencilModifierData {
int flag; /* flags */
float rgb[3]; /* Tint color */
float factor; /* Mix factor */
+ char modify_color; /* modify stroke, fill or both */
+ char pad[7];
} TintGpencilModifierData;
typedef enum eTintGpencil_Flag {
@@ -159,7 +167,8 @@ typedef struct ColorGpencilModifierData {
int pass_index; /* custom index for passes */
int flag; /* flags */
float hsv[3]; /* hsv factors */
- char pad[4];
+ char modify_color; /* modify stroke, fill or both */
+ char pad[3];
} ColorGpencilModifierData;
typedef enum eColorGpencil_Flag {
@@ -175,7 +184,8 @@ typedef struct OpacityGpencilModifierData {
int pass_index; /* custom index for passes */
int flag; /* flags */
float factor; /* Main Opacity factor */
- char pad[4];
+ char modify_color; /* modify stroke, fill or both */
+ char pad[3];
} OpacityGpencilModifierData;
typedef enum eOpacityGpencil_Flag {
diff --git a/source/blender/makesrna/intern/rna_gpencil_modifier.c b/source/blender/makesrna/intern/rna_gpencil_modifier.c
index 4f29ed58ba7..c137eec7568 100644
--- a/source/blender/makesrna/intern/rna_gpencil_modifier.c
+++ b/source/blender/makesrna/intern/rna_gpencil_modifier.c
@@ -82,6 +82,13 @@ const EnumPropertyItem rna_enum_object_greasepencil_modifier_type_items[] = {
};
#ifndef RNA_RUNTIME
+static const EnumPropertyItem modifier_modify_color_items[] = {
+ { GP_MODIFY_COLOR_BOTH, "BOTH", 0, "Both", "Modify fill and stroke colors" },
+ { GP_MODIFY_COLOR_STROKE, "STROKE", 0, "Stroke", "Modify stroke color only" },
+ { GP_MODIFY_COLOR_FILL, "FILL", 0, "Fill", "Modify fill color only" },
+ { 0, NULL, 0, NULL, NULL }
+};
+
static const EnumPropertyItem modifier_gphook_falloff_items[] = {
{ eGPHook_Falloff_None, "NONE", 0, "No Falloff", "" },
{ eGPHook_Falloff_Curve, "CURVE", 0, "Curve", "" },
@@ -663,6 +670,11 @@ static void rna_def_modifier_gpenciltint(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "TintGpencilModifierData");
RNA_def_struct_ui_icon(srna, ICON_COLOR);
+ prop = RNA_def_property(srna, "modify_color", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_items(prop, modifier_modify_color_items); /* share the enum */
+ RNA_def_property_ui_text(prop, "Mode", "Set what colors of the stroke are affected");
+ RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+
prop = RNA_def_property(srna, "layer", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "layername");
RNA_def_property_ui_text(prop, "Layer", "Layer name");
@@ -713,6 +725,11 @@ static void rna_def_modifier_gpencilcolor(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "ColorGpencilModifierData");
RNA_def_struct_ui_icon(srna, ICON_GROUP_VCOL);
+ prop = RNA_def_property(srna, "modify_color", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_items(prop, modifier_modify_color_items); /* share the enum */
+ RNA_def_property_ui_text(prop, "Mode", "Set what colors of the stroke are affected");
+ RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+
prop = RNA_def_property(srna, "layer", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "layername");
RNA_def_property_ui_text(prop, "Layer", "Layer name");
@@ -771,6 +788,11 @@ static void rna_def_modifier_gpencilopacity(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "OpacityGpencilModifierData");
RNA_def_struct_ui_icon(srna, ICON_MOD_MASK);
+ prop = RNA_def_property(srna, "modify_color", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_items(prop, modifier_modify_color_items); /* share the enum */
+ RNA_def_property_ui_text(prop, "Mode", "Set what colors of the stroke are affected");
+ RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+
prop = RNA_def_property(srna, "layer", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "layername");
RNA_def_property_ui_text(prop, "Layer", "Layer name");