Commit: 32e49c732bcbf225dd83c8f74911d2d1d8e8a8fb
Author: Joshua Leung
Date: Tue Oct 31 19:59:33 2017 +1300
Branches: greasepencil-object
https://developer.blender.org/rB32e49c732bcbf225dd83c8f74911d2d1d8e8a8fb
Porting more GP Modifiers
* Opacity modifier
* Color modifier
* Thickness modifier
* Tint modifier
===================================================================
M source/blender/blenkernel/BKE_gpencil.h
M source/blender/blenkernel/intern/gpencil_modifier.c
M source/blender/modifiers/intern/MOD_gpencilcolor.c
M source/blender/modifiers/intern/MOD_gpencilnoise.c
M source/blender/modifiers/intern/MOD_gpencilopacity.c
M source/blender/modifiers/intern/MOD_gpencilthick.c
M source/blender/modifiers/intern/MOD_gpenciltint.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_gpencil.h
b/source/blender/blenkernel/BKE_gpencil.h
index 7f338a18383..90f48d590c8 100644
--- a/source/blender/blenkernel/BKE_gpencil.h
+++ b/source/blender/blenkernel/BKE_gpencil.h
@@ -203,12 +203,8 @@ void BKE_gpencil_stroke_normal(const struct bGPDstroke
*gps, float r_normal[3]);
void BKE_gpencil_subdiv_modifier(int id, struct GpencilSubdivModifierData
*mmd, struct Object *ob, struct bGPDlayer *gpl, struct bGPDstroke *gps);
void BKE_gpencil_simplify_modifier(int id, struct GpencilSimplifyModifierData
*mmd, struct Object *ob, struct bGPDlayer *gpl, struct bGPDstroke *gps);
-void BKE_gpencil_thick_modifier(int id, struct GpencilThickModifierData *mmd,
struct Object *ob, struct bGPDlayer *gpl, struct bGPDstroke *gps);
-void BKE_gpencil_tint_modifier(int id, struct GpencilTintModifierData *mmd,
struct Object *ob, struct bGPDlayer *gpl, struct bGPDstroke *gps);
-void BKE_gpencil_color_modifier(int id, struct GpencilColorModifierData *mmd,
struct Object *ob, struct bGPDlayer *gpl, struct bGPDstroke *gps);
void BKE_gpencil_array_modifier(int id, struct GpencilArrayModifierData *mmd,
struct Object *ob, int elem_idx[3], float r_mat[4][4]);
void BKE_gpencil_dupli_modifier(int id, struct GpencilDupliModifierData *mmd,
struct Object *ob, struct bGPDlayer *gpl, struct bGPDframe *gpf);
-void BKE_gpencil_opacity_modifier(int id, struct GpencilOpacityModifierData
*mmd, struct Object *ob, struct bGPDlayer *gpl, struct bGPDstroke *gps);
/* (wrapper api) simplify stroke using Ramer-Douglas-Peucker algorithm */
void BKE_gpencil_simplify_stroke(struct bGPDlayer *gpl, struct bGPDstroke
*gps, float factor);
diff --git a/source/blender/blenkernel/intern/gpencil_modifier.c
b/source/blender/blenkernel/intern/gpencil_modifier.c
index 99604270739..09259fb7215 100644
--- a/source/blender/blenkernel/intern/gpencil_modifier.c
+++ b/source/blender/blenkernel/intern/gpencil_modifier.c
@@ -180,156 +180,7 @@ void BKE_gpencil_subdiv_modifier(
}
}
-/* change stroke thickness */
-void BKE_gpencil_thick_modifier(
- int UNUSED(id), GpencilThickModifierData *mmd, Object *ob, bGPDlayer
*gpl, bGPDstroke *gps)
-{
- bGPDspoint *pt;
- int vindex = defgroup_name_index(ob, mmd->vgname);
- float weight = 1.0f;
- float curvef = 1.0;
-
- if (!is_stroke_affected_by_modifier(
- mmd->layername, mmd->pass_index, 3, gpl, gps,
- mmd->flag & GP_THICK_INVERSE_LAYER, mmd->flag &
GP_THICK_INVERSE_PASS))
- {
- return;
- }
-
- for (int i = 0; i < gps->totpoints; i++) {
- curvef = 1.0;
- pt = &gps->points[i];
- /* verify vertex group */
- weight = is_point_affected_by_modifier(pt, (int)(!(mmd->flag &
GP_THICK_INVERSE_VGROUP) == 0), vindex);
- if (weight < 0) {
- continue;
- }
-
- if ((mmd->flag & GP_THICK_CUSTOM_CURVE) &&
(mmd->cur_thickness)) {
- /* nomalize value */
- float value = (float)i / (gps->totpoints - 1);
- curvef = curvemapping_evaluateF(mmd->cur_thickness, 0,
value);
- }
-
- pt->pressure += mmd->thickness * weight * curvef;
- CLAMP(pt->strength, 0.0f, 1.0f);
- }
-
-}
-
-/* tint strokes */
-void BKE_gpencil_tint_modifier(
- int UNUSED(id), GpencilTintModifierData *mmd, Object *UNUSED(ob),
bGPDlayer *gpl, bGPDstroke *gps)
-{
- bGPDspoint *pt;
-
- if (!is_stroke_affected_by_modifier(
- mmd->layername, mmd->pass_index, 1, gpl, gps,
- mmd->flag & GP_TINT_INVERSE_LAYER, mmd->flag &
GP_TINT_INVERSE_PASS))
- {
- return;
- }
-
- interp_v3_v3v3(gps->palcolor->rgb, gps->palcolor->rgb, mmd->rgb,
mmd->factor);
- interp_v3_v3v3(gps->palcolor->fill, gps->palcolor->fill, mmd->rgb,
mmd->factor);
-
- /* if factor is > 1, the alpha must be changed to get full tint */
- if (mmd->factor > 1.0f) {
- gps->palcolor->rgb[3] += mmd->factor - 1.0f;
- if (gps->palcolor->fill[3] > 1e-5) {
- gps->palcolor->fill[3] += mmd->factor - 1.0f;
- }
- }
- CLAMP4(gps->palcolor->rgb, 0.0f, 1.0f);
- CLAMP4(gps->palcolor->fill, 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++) {
- pt = &gps->points[i];
- pt->strength += mmd->factor - 1.0f;
- CLAMP(pt->strength, 0.0f, 1.0f);
- }
- }
-
-}
-
-/* color correction strokes */
-void BKE_gpencil_color_modifier(
- int UNUSED(id), GpencilColorModifierData *mmd, Object *UNUSED(ob),
bGPDlayer *gpl, bGPDstroke *gps)
-{
- PaletteColor *palcolor;
- float hsv[3], factor[3];
- if (!is_stroke_affected_by_modifier(
- mmd->layername, mmd->pass_index, 1, gpl, gps,
- mmd->flag & GP_COLOR_INVERSE_LAYER, mmd->flag &
GP_COLOR_INVERSE_PASS))
- {
- return;
- }
-
- palcolor = gps->palcolor;
- copy_v3_v3(factor, mmd->hsv);
- add_v3_fl(factor, -1.0f);
-
- rgb_to_hsv_v(palcolor->rgb, hsv);
- add_v3_v3(hsv, factor);
- CLAMP3(hsv, 0.0f, 1.0f);
- hsv_to_rgb_v(hsv, palcolor->rgb);
-
- rgb_to_hsv_v(palcolor->fill, hsv);
- add_v3_v3(hsv, factor);
- CLAMP3(hsv, 0.0f, 1.0f);
- hsv_to_rgb_v(hsv, palcolor->fill);
-
-}
-
-/* opacity strokes */
-void BKE_gpencil_opacity_modifier(
- int UNUSED(id), GpencilOpacityModifierData *mmd, Object *ob, bGPDlayer
*gpl, bGPDstroke *gps)
-{
- bGPDspoint *pt;
- int vindex = defgroup_name_index(ob, mmd->vgname);
- float weight = 1.0f;
-
- if (!is_stroke_affected_by_modifier(
- mmd->layername, mmd->pass_index, 3, gpl, gps,
- mmd->flag & GP_OPACITY_INVERSE_LAYER, 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;
-
- /* if factor is > 1, then force opacity */
- if (mmd->factor > 1.0f) {
- gps->palcolor->rgb[3] += mmd->factor - 1.0f;
- if (gps->palcolor->fill[3] > 1e-5) {
- gps->palcolor->fill[3] += mmd->factor - 1.0f;
- }
- }
-
-
- CLAMP(gps->palcolor->rgb[3], 0.0f, 1.0f);
- CLAMP(gps->palcolor->fill[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++) {
- pt = &gps->points[i];
- /* verify vertex group */
- weight = is_point_affected_by_modifier(pt,
(int)(!(mmd->flag & GP_OPACITY_INVERSE_VGROUP) == 0), vindex);
- if (weight < 0) {
- pt->strength += mmd->factor - 1.0f;
- }
- else {
- pt->strength += ((mmd->factor * weight) - 1.0f);
- }
- CLAMP(pt->strength, 0.0f, 1.0f);
- }
- }
-}
/* helper function to sort strokes using qsort */
static int gpencil_stroke_cache_compare(const void *a1, const void *a2)
@@ -801,22 +652,6 @@ void BKE_gpencil_stroke_modifiers(Object *ob, bGPDlayer
*gpl, bGPDframe *UNUSED(
case eModifierType_GpencilSimplify:
BKE_gpencil_simplify_modifier(id,
(GpencilSimplifyModifierData *)md, ob, gpl, gps);
break;
- // Thickness
- case eModifierType_GpencilThick:
- BKE_gpencil_thick_modifier(id,
(GpencilThickModifierData *)md, ob, gpl, gps);
- break;
- // Tint
- case eModifierType_GpencilTint:
- BKE_gpencil_tint_modifier(id,
(GpencilTintModifierData *)md, ob, gpl, gps);
- break;
- // Opacity
- case eModifierType_GpencilOpacity:
- BKE_gpencil_opacity_modifier(id,
(GpencilOpacityModifierData *)md, ob, gpl, gps);
- break;
- // Color Correction
- case eModifierType_GpencilColor:
- BKE_gpencil_color_modifier(id,
(GpencilColorModifierData *)md, ob, gpl, gps);
- break;
// Lattice
case eModifierType_GpencilLattice:
BKE_gpencil_lattice_modifier(id,
(GpencilLatticeModifierData *)md, ob, gpl, gps);
diff --git a/source/blender/modifiers/intern/MOD_gpencilcolor.c
b/source/blender/modifiers/intern/MOD_gpencilcolor.c
index 5a7f27818fe..f065e364787 100644
--- a/source/blender/modifiers/intern/MOD_gpencilcolor.c
+++ b/source/blender/modifiers/intern/MOD_gpencilcolor.c
@@ -34,8 +34,10 @@
#include "DNA_object_types.h"
#include "DNA_gpencil_types.h"
-#include "BLI_utildefines.h"
#include "BLI_ghash.h"
+#include "BLI_math_color.h"
+#include "BLI_math_vector.h"
+#include "BLI_utildefines.h"
#include "BKE_global.h"
#include "BKE_context.h"
@@ -45,6 +47,7 @@
#include "DEG_depsgraph.h"
#include "MOD_modifiertypes.h"
+#include "MOD_gpencil_util.h"
static void initData(ModifierData *md)
{
@@ -60,7 +63,38 @@ static void copyData(ModifierData *md, ModifierData *target)
modifier_copyData_generic(md, target);
}
-static void bakeModifierGP(const bContext *C, const EvaluationContext
*UNUSED(eval_ctx),
+/* color correction strokes */
+static void deformStroke(ModifierData *md, const EvaluationContext
*UNUSED(eval_ctx),
+ Object *UNUSED(ob), bGPDlayer *gpl, bGPDstroke *gps)
+{
+ GpencilColorModifierData *mmd = (GpencilColorModifierData *)md;
+ PaletteColor *palcolor;
+ float hsv[3], factor[3];
+
+ if (!is_stroke_affected_by_modifier(
+ mmd->layername, mmd->pass_index, 1, gpl, gps,
+ mmd->flag & GP_COLOR_INVERSE_LAYER, mmd->flag &
GP_COLOR_INVERSE_PASS))
+ {
+ return;
+ }
+
+ palcolor = gps->palcolor;
+ copy_v3_v3(factor, mmd->hsv);
+ add_v3_fl(factor, -1.0f);
+
+ rgb_to_hsv_v(palcolor->rgb, hsv);
+ add_v3_v3(hsv, factor);
+ CLAMP3(hsv, 0.0f, 1.0f);
+ hsv_to_rgb_v(hsv, palcolor->rgb);
+
+ rgb_to_hsv_v(palcolor->fill, hsv);
+ add_v3_v3(hsv, factor);
+ CLAMP3(hsv, 0.0f, 1.0f);
+ hsv_to_rgb_v(hsv, palcolor->fill);
+
+}
+
+static void bakeModifierGP(const bContext *UNUSED(C), const EvaluationContext
*eval_ctx,
ModifierData *md, Object *ob)
{
GpencilColorModifierData *mmd = (GpencilColorModifierData *)md;
@@ -95,7 +129,8 @@ static void bakeModifierGP(const bContext *C, const
EvaluationContext *UNUSED(ev
newpalcolor = gps->palcolor;
}
BLI_ghash_insert(gh_color,
gps->palcolor->info, newpalcolor);
- BKE_gpencil_color_modifier(-1,
(GpencilColorModifierData *)md, ob, gpl, gps);
+
+ deformStroke(md, eval_ctx, ob, gpl,
gps);
}
else {
gps->palcolor = newpalcolor;
@@ -135,7 +170,7 @@ ModifierTypeInfo modifierType_GpencilColor = {
/* deformMatricesEM */ NULL,
/* applyModifier */ NULL,
/* applyModifierEM */ NULL,
- /* deformStroke */ NULL,
+ /* deformStroke */ deformStroke,
/* generateStrokes */ NULL,
/* bakeModifierGP */ bakeModifier
@@ Diff output truncated at 10240 characters. @@
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs