[Bf-blender-cvs] [63971f4c63e] greasepencil-object: New Hue/Saturation modifier
Antonio Vazquez
noreply at git.blender.org
Mon Jul 24 13:49:29 CEST 2017
Commit: 63971f4c63e5fdff8aaa912a10323be724a32096
Author: Antonio Vazquez
Date: Mon Jul 24 13:49:19 2017 +0200
Branches: greasepencil-object
https://developer.blender.org/rB63971f4c63e5fdff8aaa912a10323be724a32096
New Hue/Saturation modifier
===================================================================
M release/scripts/startup/bl_ui/properties_data_modifier.py
M source/blender/blenkernel/BKE_gpencil.h
M source/blender/blenkernel/intern/gpencil.c
M source/blender/makesdna/DNA_modifier_types.h
M source/blender/makesrna/RNA_access.h
M source/blender/makesrna/intern/rna_modifier.c
M source/blender/modifiers/CMakeLists.txt
M source/blender/modifiers/MOD_modifiertypes.h
A source/blender/modifiers/intern/MOD_gpencilcolor.c
M source/blender/modifiers/intern/MOD_util.c
===================================================================
diff --git a/release/scripts/startup/bl_ui/properties_data_modifier.py b/release/scripts/startup/bl_ui/properties_data_modifier.py
index 3467bb7acee..f30a523cfa9 100644
--- a/release/scripts/startup/bl_ui/properties_data_modifier.py
+++ b/release/scripts/startup/bl_ui/properties_data_modifier.py
@@ -1613,6 +1613,28 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
row = layout.row()
row.prop(md, "create_colors")
+ def GP_COLOR(self, layout, ob, md):
+ gpd = ob.grease_pencil
+ split = layout.split()
+
+ col = split.column()
+ col.label("Color:")
+ col.prop(md, "hue", text="H")
+ col.prop(md, "saturation", text="S")
+ col.prop(md, "value", text="V")
+
+ col = split.column()
+ col.label("Layer:")
+ row = col.row(align=True)
+ row.prop_search(md, "layer", gpd, "layers", text="", icon="GREASEPENCIL")
+ row.prop(md, "inverse_layers", text="", icon="ARROW_LEFTRIGHT")
+ row = col.row(align=True)
+ row.prop(md, "passindex", text="Pass")
+ row.prop(md, "inverse_pass", text="", icon="ARROW_LEFTRIGHT")
+
+ row = layout.row()
+ row.prop(md, "create_colors")
+
def GP_OPACITY(self, layout, ob, md):
gpd = ob.grease_pencil
split = layout.split()
diff --git a/source/blender/blenkernel/BKE_gpencil.h b/source/blender/blenkernel/BKE_gpencil.h
index 57161195119..861da789d88 100644
--- a/source/blender/blenkernel/BKE_gpencil.h
+++ b/source/blender/blenkernel/BKE_gpencil.h
@@ -47,6 +47,7 @@ struct GpencilNoiseModifierData;
struct GpencilSubdivModifierData;
struct GpencilThickModifierData;
struct GpencilTintModifierData;
+struct GpencilColorModifierData;
struct GpencilArrayModifierData;
struct GpencilDupliModifierData;
struct GpencilOpacityModifierData;
@@ -153,6 +154,7 @@ void ED_gpencil_noise_modifier(int id, struct GpencilNoiseModifierData *mmd, str
void ED_gpencil_subdiv_modifier(int id, struct GpencilSubdivModifierData *mmd, struct bGPDlayer *gpl, struct bGPDstroke *gps);
void ED_gpencil_thick_modifier(int id, struct GpencilThickModifierData *mmd, struct bGPDlayer *gpl, struct bGPDstroke *gps);
void ED_gpencil_tint_modifier(int id, struct GpencilTintModifierData *mmd, struct bGPDlayer *gpl, struct bGPDstroke *gps);
+void ED_gpencil_color_modifier(int id, struct GpencilColorModifierData *mmd, struct bGPDlayer *gpl, struct bGPDstroke *gps);
void ED_gpencil_array_modifier(int id, struct GpencilArrayModifierData *mmd, struct Object *ob, int elem_idx[3], float r_mat[4][4]);
void ED_gpencil_dupli_modifier(int id, struct GpencilDupliModifierData *mmd, struct bGPDlayer *gpl, struct bGPDframe *gpf);
void ED_gpencil_opacity_modifier(int id, struct GpencilOpacityModifierData *mmd, struct bGPDlayer *gpl, struct bGPDstroke *gps);
diff --git a/source/blender/blenkernel/intern/gpencil.c b/source/blender/blenkernel/intern/gpencil.c
index 7a135e17d50..2c905b44acc 100644
--- a/source/blender/blenkernel/intern/gpencil.c
+++ b/source/blender/blenkernel/intern/gpencil.c
@@ -39,6 +39,7 @@
#include "BLI_blenlib.h"
#include "BLI_utildefines.h"
#include "BLI_math_vector.h"
+#include "BLI_math_color.h"
#include "BLI_string_utils.h"
#include "BLI_rand.h"
@@ -1916,6 +1917,27 @@ void ED_gpencil_tint_modifier(int UNUSED(id), GpencilTintModifierData *mmd, bGPD
CLAMP3(gps->palcolor->fill, 0.0f, 1.0f);
}
+/* color correction strokes */
+void ED_gpencil_color_modifier(int UNUSED(id), GpencilColorModifierData *mmd, bGPDlayer *gpl, bGPDstroke *gps)
+{
+ float hsv[3];
+ if (!is_stroke_affected_by_modifier(mmd->layername, mmd->passindex, 3, gpl, gps,
+ (int)mmd->flag & GP_COLOR_INVERSE_LAYER, (int)mmd->flag & GP_COLOR_INVERSE_PASS)) {
+ return;
+ }
+
+ rgb_to_hsv_v(gps->palcolor->rgb, hsv);
+ add_v3_v3(hsv, mmd->hsv);
+ hsv_to_rgb_v(hsv, gps->palcolor->rgb);
+
+ rgb_to_hsv_v(gps->palcolor->fill, hsv);
+ add_v3_v3(hsv, mmd->hsv);
+ hsv_to_rgb_v(hsv, gps->palcolor->fill);
+
+ CLAMP3(gps->palcolor->rgb, 0.0f, 1.0f);
+ CLAMP3(gps->palcolor->fill, 0.0f, 1.0f);
+}
+
/* opacity strokes */
void ED_gpencil_opacity_modifier(int UNUSED(id), GpencilOpacityModifierData *mmd, bGPDlayer *gpl, bGPDstroke *gps)
{
@@ -1935,7 +1957,7 @@ void ED_gpencil_opacity_modifier(int UNUSED(id), GpencilOpacityModifierData *mmd
/* 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];
pt->strength += (mmd->factor - 1.0f);
CLAMP(pt->strength, 0.0f, 1.0f);
}
@@ -2139,10 +2161,14 @@ void ED_gpencil_stroke_modifiers(Object *ob, bGPDlayer *gpl, bGPDframe *gpf, bGP
case eModifierType_GpencilTint:
ED_gpencil_tint_modifier(id, (GpencilTintModifierData *)md, gpl, gps);
break;
- // Tint
+ // Opacity
case eModifierType_GpencilOpacity:
ED_gpencil_opacity_modifier(id, (GpencilOpacityModifierData *)md, gpl, gps);
break;
+ // Color Correction
+ case eModifierType_GpencilColor:
+ ED_gpencil_color_modifier(id, (GpencilColorModifierData *)md, gpl, gps);
+ break;
}
}
++id;
diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h
index e5725fedaa4..8fa56123186 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -94,6 +94,7 @@ typedef enum ModifierType {
eModifierType_GpencilArray = 58,
eModifierType_GpencilDupli = 59,
eModifierType_GpencilOpacity = 60,
+ eModifierType_GpencilColor = 61,
NUM_MODIFIER_TYPES
} ModifierType;
@@ -1687,6 +1688,21 @@ typedef enum eGpencilTint_Flag {
GP_TINT_INVERSE_PASS = (1 << 2),
} eGpencilTint_Flag;
+typedef struct GpencilColorModifierData {
+ ModifierData modifier;
+ char layername[64]; /* layer name */
+ int passindex; /* custom index for passes */
+ int flag; /* flags */
+ float hsv[3]; /* hsv factors */
+ char pad[4];
+} GpencilColorModifierData;
+
+typedef enum eGpencilColor_Flag {
+ GP_COLOR_CREATE_COLORS = (1 << 0),
+ GP_COLOR_INVERSE_LAYER = (1 << 1),
+ GP_COLOR_INVERSE_PASS = (1 << 2),
+} eGpencilColor_Flag;
+
typedef struct GpencilOpacityModifierData {
ModifierData modifier;
char layername[64]; /* layer name */
diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h
index 63088d1afe6..edc760252e0 100644
--- a/source/blender/makesrna/RNA_access.h
+++ b/source/blender/makesrna/RNA_access.h
@@ -616,6 +616,7 @@ extern StructRNA RNA_GpencilNoiseModifier;
extern StructRNA RNA_GpencilSubdivModifier;
extern StructRNA RNA_GpencilThickModifier;
extern StructRNA RNA_GpencilTintModifier;
+extern StructRNA RNA_GpencilColorModifier;
extern StructRNA RNA_GpencilArrayModifier;
extern StructRNA RNA_GpencilDupliModifier;
extern StructRNA RNA_GpencilOpacityModifier;
diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c
index ed99a339783..bd44b51adc8 100644
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@ -127,6 +127,7 @@ EnumPropertyItem rna_enum_object_modifier_type_items[] = {
{eModifierType_GpencilSubdiv, "GP_SUBDIV", ICON_MOD_SUBSURF, "Subdivide", "Subdivide stroke adding more control points to strokes" },
{eModifierType_GpencilThick, "GP_THICK", ICON_MAN_ROT, "Thickness", "Change stroke thickness" },
{eModifierType_GpencilTint, "GP_TINT", ICON_COLOR, "Tint", "Tint strokes with new color" },
+ {eModifierType_GpencilColor, "GP_COLOR", ICON_GROUP_VCOL, "Hue/Saturation", "Apply changes to color" },
{eModifierType_GpencilOpacity, "GP_OPACITY", ICON_MOD_MASK, "Opacity", "Opacity of the strokes" },
{0, NULL, 0, NULL, NULL}
};
@@ -447,6 +448,8 @@ static StructRNA *rna_Modifier_refine(struct PointerRNA *ptr)
return &RNA_GpencilThickModifier;
case eModifierType_GpencilTint:
return &RNA_GpencilTintModifier;
+ case eModifierType_GpencilColor:
+ return &RNA_GpencilColorModifier;
case eModifierType_GpencilArray:
return &RNA_GpencilArrayModifier;
case eModifierType_GpencilDupli:
@@ -4979,6 +4982,7 @@ static void rna_def_modifier_gpenciltint(BlenderRNA *brna)
prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "factor");
RNA_def_property_range(prop, 0, 1.0);
+ RNA_def_property_ui_range(prop, 0, 1.0, 0.1, 3);
RNA_def_property_ui_text(prop, "Factor", "Factor for mixing color");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -5004,6 +5008,64 @@ static void rna_def_modifier_gpenciltint(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_Modifier_update");
}
+static void rna_def_modifier_gpencilcolor(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ srna = RNA_def_struct(brna, "GpencilColorModifier", "Modifier");
+ RNA_def_struct_ui_text(srna, "Hue/Saturation Modifier", "Change Hue/Saturation modifier");
+ RNA_def_struct_sdna(srna, "GpencilColorModifierData");
+ RNA_def_struct_ui_icon(srna, ICON_GROUP_VCOL);
+
+ 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");
+ RNA_def_property_update(prop, 0, "rna_Modifier_update");
+
+ prop = RNA_def_property(srna, "hue", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_range(prop, -1.0, 1.0);
+ RNA_def_property_ui_range(prop, -1.0, 1.0, 0.1, 3);
+ RNA_def_property_float_sdna(prop, NULL, "hsv[0]");
+ RNA_def_property_ui_text(prop, "Hue", "Color Hue");
+ RNA_def_property_update(prop, 0, "rna_Modifier_update");
+
+ prop = RNA_def_property(srna, "saturation", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_range(prop, -1.0, 1.0);
+ RNA_def_property_ui_range(prop, -1.0, 1.0, 0.1, 3);
+ RNA_def_property_float_sdna(prop, NULL, "hsv[1]");
+ RNA_def_property_ui_text(prop, "Saturation", "Color Saturation");
+ RNA_def_property_update(prop, 0, "rna_Modifier_update");
+
+ prop = RNA_def_property(srna, "value", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_range(prop, -1.0, 1.0);
+ RNA_def_property_ui_range(prop, -1.0, 1
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list