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.
This commit is contained in:
parent
f284821bf7
commit
2e10c658f4
|
@ -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
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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,18 +85,23 @@ static void deformStroke(
|
|||
return;
|
||||
}
|
||||
|
||||
gps->runtime.tmp_fill_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;
|
||||
if (gps->runtime.tmp_fill_rgba[3] > 1e-5) {
|
||||
gps->runtime.tmp_fill_rgba[3] += mmd->factor - 1.0f;
|
||||
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);
|
||||
}
|
||||
|
||||
CLAMP(gps->runtime.tmp_stroke_rgba[3], 0.0f, 1.0f);
|
||||
CLAMP(gps->runtime.tmp_fill_rgba[3], 0.0f, 1.0f);
|
||||
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);
|
||||
}
|
||||
|
||||
/* if opacity > 1.0, affect the strength of the stroke */
|
||||
if (mmd->factor > 1.0f) {
|
||||
|
|
|
@ -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,19 +82,23 @@ 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 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) {
|
||||
gps->runtime.tmp_fill_rgba[3] += mmd->factor - 1.0f;
|
||||
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);
|
||||
}
|
||||
|
||||
CLAMP4(gps->runtime.tmp_stroke_rgba, 0.0f, 1.0f);
|
||||
CLAMP4(gps->runtime.tmp_fill_rgba, 0.0f, 1.0f);
|
||||
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);
|
||||
}
|
||||
|
||||
/* if factor > 1.0, affect the strength of the stroke */
|
||||
if (mmd->factor > 1.0f) {
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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");
|
||||
|
|
Loading…
Reference in New Issue