diff options
author | Charlie Jolly <mistajolly@gmail.com> | 2018-08-09 14:42:02 +0300 |
---|---|---|
committer | Antonioya <blendergit@gmail.com> | 2018-08-09 14:43:21 +0300 |
commit | 2e10c658f42a842404f16a1b03ff4844e41d538c (patch) | |
tree | efde511079a2e4537477c1da3f5b202982bc4780 | |
parent | f284821bf714cca98d86ede1e2a9713094d1d686 (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.
6 files changed, 79 insertions, 27 deletions
diff --git a/release/scripts/startup/bl_ui/properties_data_modifier.py b/release/scripts/startup/bl_ui/properties_data_modifier.py index 5b3d89c30a5..9acc7996bb9 100644 --- a/release/scripts/startup/bl_ui/properties_data_modifier.py +++ b/release/scripts/startup/bl_ui/properties_data_modifier.py @@ -1757,6 +1757,8 @@ class DATA_PT_gpencil_modifiers(ModifierButtonsPanel, Panel): row = layout.row() row.prop(md, "create_materials") + row.prop(md, "modify_color") + def GP_COLOR(self, layout, ob, md): gpd = ob.data @@ -1779,6 +1781,7 @@ class DATA_PT_gpencil_modifiers(ModifierButtonsPanel, Panel): row = layout.row() row.prop(md, "create_materials") + row.prop(md, "modify_color") def GP_OPACITY(self, layout, ob, md): gpd = ob.data @@ -1805,6 +1808,7 @@ class DATA_PT_gpencil_modifiers(ModifierButtonsPanel, Panel): row = layout.row() row.prop(md, "create_materials") + row.prop(md, "modify_color") def GP_INSTANCE(self, layout, ob, md): gpd = ob.data 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"); |