[Bf-blender-cvs] [040d763042a] greasepencil-object: WIP: Basic implementation of Opacity modifier
Antonio Vazquez
noreply at git.blender.org
Mon Jul 24 11:27:55 CEST 2017
Commit: 040d763042aa2fcec8254f34dfc315034c61b7e6
Author: Antonio Vazquez
Date: Mon Jul 24 10:44:38 2017 +0200
Branches: greasepencil-object
https://developer.blender.org/rB040d763042aa2fcec8254f34dfc315034c61b7e6
WIP: Basic implementation of Opacity modifier
Still pending the target functionality.
===================================================================
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_gpencilopacity.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 00a5f4b73b9..559641013de 100644
--- a/release/scripts/startup/bl_ui/properties_data_modifier.py
+++ b/release/scripts/startup/bl_ui/properties_data_modifier.py
@@ -1613,6 +1613,33 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
row = layout.row()
row.prop(md, "create_colors")
+ def GP_OPACITY(self, layout, ob, md):
+ gpd = ob.grease_pencil
+ row = layout.row()
+ row.prop(md, "factor")
+
+ split = layout.split()
+ col = split.column()
+ col.label("Target:")
+ col.prop(md, "target", text="")
+ is_obj = md.target is not None
+ row = col.row()
+ row.enabled = is_obj
+ row.prop(md, "size")
+ row = col.row()
+ row.enabled = is_obj
+ row.prop(md, "falloff")
+ row.prop(md, "box_mode")
+
+ 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")
+
def GP_ARRAY(self, layout, ob, md):
split = layout.split()
col = split.column()
diff --git a/source/blender/blenkernel/BKE_gpencil.h b/source/blender/blenkernel/BKE_gpencil.h
index b0907caa748..57161195119 100644
--- a/source/blender/blenkernel/BKE_gpencil.h
+++ b/source/blender/blenkernel/BKE_gpencil.h
@@ -49,6 +49,7 @@ struct GpencilThickModifierData;
struct GpencilTintModifierData;
struct GpencilArrayModifierData;
struct GpencilDupliModifierData;
+struct GpencilOpacityModifierData;
/* ------------ Grease-Pencil API ------------------ */
@@ -154,5 +155,6 @@ void ED_gpencil_thick_modifier(int id, struct GpencilThickModifierData *mmd, str
void ED_gpencil_tint_modifier(int id, struct GpencilTintModifierData *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);
#endif /* __BKE_GPENCIL_H__ */
diff --git a/source/blender/blenkernel/intern/gpencil.c b/source/blender/blenkernel/intern/gpencil.c
index bc021bfc67f..cfe38c45e98 100644
--- a/source/blender/blenkernel/intern/gpencil.c
+++ b/source/blender/blenkernel/intern/gpencil.c
@@ -1912,6 +1912,19 @@ void ED_gpencil_tint_modifier(int UNUSED(id), GpencilTintModifierData *mmd, bGPD
interp_v3_v3v3(gps->palcolor->fill, gps->palcolor->fill, mmd->rgb, mmd->factor);
}
+/* opacity strokes */
+void ED_gpencil_opacity_modifier(int UNUSED(id), GpencilOpacityModifierData *mmd, bGPDlayer *gpl, bGPDstroke *gps)
+{
+ if (!is_stroke_affected_by_modifier(mmd->layername, mmd->passindex, 3, gpl, gps,
+ (int)mmd->flag & GP_OPACITY_INVERSE_LAYER, (int)mmd->flag & GP_OPACITY_INVERSE_PASS)) {
+ return;
+ }
+
+ gps->palcolor->rgb[3] = gps->palcolor->rgb[3] * mmd->factor;
+ gps->palcolor->fill[3] = gps->palcolor->fill[3] * mmd->factor;
+
+}
+
/* helper function to sort strokes using qsort */
static int gpencil_stroke_cache_compare(const void *a1, const void *a2)
{
@@ -2109,6 +2122,10 @@ 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
+ case eModifierType_GpencilOpacity:
+ ED_gpencil_opacity_modifier(id, (GpencilOpacityModifierData *)md, gpl, gps);
+ break;
}
}
++id;
diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h
index 7ff6ca387cc..15a519662d0 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -93,6 +93,7 @@ typedef enum ModifierType {
eModifierType_GpencilTint = 57,
eModifierType_GpencilArray = 58,
eModifierType_GpencilDupli = 59,
+ eModifierType_GpencilOpacity = 60,
NUM_MODIFIER_TYPES
} ModifierType;
@@ -1686,6 +1687,24 @@ typedef enum eGpencilTint_Flag {
GP_TINT_INVERSE_PASS = (1 << 2),
} eGpencilTint_Flag;
+typedef struct GpencilOpacityModifierData {
+ ModifierData modifier;
+ struct Object *target; /* target */
+ char layername[64]; /* layer name */
+ int passindex; /* custom index for passes */
+ int flag; /* flags */
+ float factor; /* Main Opacity factor */
+ float size; /* radius of focal area */
+ float falloff; /* decay of opacity factor */
+ char pad[4];
+} GpencilOpacityModifierData;
+
+typedef enum eGpencilOpacity_Flag {
+ GP_OPACITY_INVERSE_LAYER = (1 << 0),
+ GP_OPACITY_INVERSE_PASS = (1 << 1),
+ GP_OPACITY_BOX_MODE = (1 << 2),
+} eGpencilOpacity_Flag;
+
typedef struct GpencilArrayModifierData {
ModifierData modifier;
int count[3]; /* number of elements in array */
diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h
index 1983f1528f2..63088d1afe6 100644
--- a/source/blender/makesrna/RNA_access.h
+++ b/source/blender/makesrna/RNA_access.h
@@ -618,6 +618,7 @@ extern StructRNA RNA_GpencilThickModifier;
extern StructRNA RNA_GpencilTintModifier;
extern StructRNA RNA_GpencilArrayModifier;
extern StructRNA RNA_GpencilDupliModifier;
+extern StructRNA RNA_GpencilOpacityModifier;
extern StructRNA RNA_TexMapping;
extern StructRNA RNA_Text;
extern StructRNA RNA_TextBox;
diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c
index 4031a91a3ca..a7c21b283ac 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_GpencilOpacity, "GP_OPACITY", ICON_MOD_MASK, "Opacity", "Opacity of the strokes" },
{0, NULL, 0, NULL, NULL}
};
@@ -440,6 +441,8 @@ static StructRNA *rna_Modifier_refine(struct PointerRNA *ptr)
return &RNA_GpencilArrayModifier;
case eModifierType_GpencilDupli:
return &RNA_GpencilDupliModifier;
+ case eModifierType_GpencilOpacity:
+ return &RNA_GpencilOpacityModifier;
/* Default */
case eModifierType_None:
case eModifierType_ShapeKey:
@@ -4991,6 +4994,69 @@ static void rna_def_modifier_gpenciltint(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_Modifier_update");
}
+static void rna_def_modifier_gpencilopacity(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ srna = RNA_def_struct(brna, "GpencilOpacityModifier", "Modifier");
+ RNA_def_struct_ui_text(srna, "Opacity Modifier", "Opacity of Strokes modifier");
+ RNA_def_struct_sdna(srna, "GpencilOpacityModifierData");
+ RNA_def_struct_ui_icon(srna, ICON_MOD_MASK);
+
+ 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, "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_text(prop, "Factor", "Factor for mixing color");
+ RNA_def_property_update(prop, 0, "rna_Modifier_update");
+
+ prop = RNA_def_property(srna, "falloff", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "falloff");
+ RNA_def_property_range(prop, 0, 1.0);
+ RNA_def_property_ui_text(prop, "Falloff", "Factor for gradient");
+ RNA_def_property_update(prop, 0, "rna_Modifier_update");
+
+ prop = RNA_def_property(srna, "size", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "size");
+ RNA_def_property_range(prop, 0, FLT_MAX);
+ RNA_def_property_ui_text(prop, "Size", "Size of view area");
+ RNA_def_property_update(prop, 0, "rna_Modifier_update");
+
+ prop = RNA_def_property(srna, "passindex", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "passindex");
+ RNA_def_property_range(prop, 0, 100);
+ RNA_def_property_ui_text(prop, "Pass", "Pass index");
+ RNA_def_property_update(prop, 0, "rna_Modifier_update");
+
+ prop = RNA_def_property(srna, "box_mode", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_OPACITY_BOX_MODE);
+ RNA_def_property_ui_text(prop, "Box", "Use rectangle shape for view area");
+ RNA_def_property_update(prop, 0, "rna_Modifier_update");
+
+ prop = RNA_def_property(srna, "inverse_layers", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_OPACITY_INVERSE_LAYER);
+ RNA_def_property_ui_text(prop, "Inverse Layers", "Inverse filter");
+ RNA_def_property_update(prop, 0, "rna_Modifier_update");
+
+ prop = RNA_def_property(srna, "inverse_pass", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_OPACITY_INVERSE_PASS);
+ RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
+ RNA_def_property_update(prop, 0, "rna_Modifier_update");
+
+ prop = RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
+ RNA_def_property_pointer_sdna(prop, NULL, "target");
+ RNA_def_property_ui_text(prop, "Target", "Target object");
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
+ RNA_def_property_update(prop, 0, "rna_Modifier_update");
+ //RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update")
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list