diff options
Diffstat (limited to 'source/blender/gpencil_modifiers')
15 files changed, 73 insertions, 17 deletions
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencil_util.c b/source/blender/gpencil_modifiers/intern/MOD_gpencil_util.c index 5b5290dc0ff..5209313f717 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencil_util.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencil_util.c @@ -74,9 +74,10 @@ void gpencil_modifier_type_init(GpencilModifierTypeInfo *types[]) #undef INIT_GP_TYPE } -/* verify if valid layer and pass index */ +/* verify if valid layer, material and pass index */ bool is_stroke_affected_by_modifier(Object *ob, char *mlayername, + char *mmaterialname, int mpassindex, int gpl_passindex, int minpoints, @@ -84,9 +85,11 @@ bool is_stroke_affected_by_modifier(Object *ob, bGPDstroke *gps, bool inv1, bool inv2, - bool inv3) + bool inv3, + bool inv4) { - MaterialGPencilStyle *gp_style = BKE_material_gpencil_settings_get(ob, gps->mat_nr + 1); + Material *ma = give_current_material(ob, gps->mat_nr + 1); + MaterialGPencilStyle *gp_style = ma->gp_style; /* omit if filter by layer */ if (mlayername[0] != '\0') { @@ -101,6 +104,19 @@ bool is_stroke_affected_by_modifier(Object *ob, } } } + /* omit if filter by material */ + if (mmaterialname[0] != '\0') { + if (inv4 == false) { + if (!STREQ(mmaterialname, ma->id.name + 2)) { + return false; + } + } + else { + if (STREQ(mmaterialname, ma->id.name + 2)) { + return false; + } + } + } /* verify layer pass */ if (gpl_passindex > 0) { if (inv3 == false) { diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencil_util.h b/source/blender/gpencil_modifiers/intern/MOD_gpencil_util.h index c3dbd341e10..7f00e072cda 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencil_util.h +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencil_util.h @@ -34,6 +34,7 @@ struct bGPDstroke; bool is_stroke_affected_by_modifier(struct Object *ob, char *mlayername, + char *mmaterialname, int mpassindex, int gpl_passindex, int minpoints, @@ -41,7 +42,8 @@ bool is_stroke_affected_by_modifier(struct Object *ob, bGPDstroke *gps, bool inv1, bool inv2, - bool inv3); + bool inv3, + bool inv4); float get_modifier_point_weight(struct MDeformVert *dvert, bool inverse, int def_nr); diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c index 0a391a6e63e..c311497ffbb 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c @@ -171,6 +171,7 @@ static void generate_geometry(GpencilModifierData *md, */ if (is_stroke_affected_by_modifier(ob, mmd->layername, + mmd->materialname, mmd->pass_index, mmd->layer_pass, 1, @@ -178,7 +179,8 @@ static void generate_geometry(GpencilModifierData *md, gps, mmd->flag & GP_ARRAY_INVERT_LAYER, mmd->flag & GP_ARRAY_INVERT_PASS, - mmd->flag & GP_ARRAY_INVERT_LAYERPASS)) { + mmd->flag & GP_ARRAY_INVERT_LAYERPASS, + mmd->flag & GP_ARRAY_INVERT_MATERIAL)) { valid_strokes[idx] = true; num_valid++; } diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilcolor.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilcolor.c index 13329e4176d..741acfbe405 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencilcolor.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilcolor.c @@ -51,6 +51,7 @@ static void initData(GpencilModifierData *md) gpmd->pass_index = 0; ARRAY_SET_ITEMS(gpmd->hsv, 0.5f, 1.0f, 1.0f); gpmd->layername[0] = '\0'; + gpmd->materialname[0] = '\0'; gpmd->flag |= GP_COLOR_CREATE_COLORS; gpmd->modify_color = GP_MODIFY_COLOR_BOTH; } @@ -74,6 +75,7 @@ static void deformStroke(GpencilModifierData *md, if (!is_stroke_affected_by_modifier(ob, mmd->layername, + mmd->materialname, mmd->pass_index, mmd->layer_pass, 1, @@ -81,7 +83,8 @@ static void deformStroke(GpencilModifierData *md, gps, mmd->flag & GP_COLOR_INVERT_LAYER, mmd->flag & GP_COLOR_INVERT_PASS, - mmd->flag & GP_COLOR_INVERT_LAYERPASS)) { + mmd->flag & GP_COLOR_INVERT_LAYERPASS, + mmd->flag & GP_COLOR_INVERT_MATERIAL)) { return; } diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilhook.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilhook.c index a3dbcdf23de..810a2ba7e25 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencilhook.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilhook.c @@ -77,6 +77,7 @@ static void initData(GpencilModifierData *md) HookGpencilModifierData *gpmd = (HookGpencilModifierData *)md; gpmd->pass_index = 0; gpmd->layername[0] = '\0'; + gpmd->materialname[0] = '\0'; gpmd->vgname[0] = '\0'; gpmd->object = NULL; gpmd->force = 0.5f; @@ -206,6 +207,7 @@ static void deformStroke(GpencilModifierData *md, if (!is_stroke_affected_by_modifier(ob, mmd->layername, + mmd->materialname, mmd->pass_index, mmd->layer_pass, 1, @@ -213,7 +215,8 @@ static void deformStroke(GpencilModifierData *md, gps, mmd->flag & GP_HOOK_INVERT_LAYER, mmd->flag & GP_HOOK_INVERT_PASS, - mmd->flag & GP_HOOK_INVERT_LAYERPASS)) { + mmd->flag & GP_HOOK_INVERT_LAYERPASS, + mmd->flag & GP_HOOK_INVERT_MATERIAL)) { return; } diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencillattice.c b/source/blender/gpencil_modifiers/intern/MOD_gpencillattice.c index aa5015bac35..d5295fc7306 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencillattice.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencillattice.c @@ -55,6 +55,7 @@ static void initData(GpencilModifierData *md) LatticeGpencilModifierData *gpmd = (LatticeGpencilModifierData *)md; gpmd->pass_index = 0; gpmd->layername[0] = '\0'; + gpmd->materialname[0] = '\0'; gpmd->vgname[0] = '\0'; gpmd->object = NULL; gpmd->cache_data = NULL; @@ -78,6 +79,7 @@ static void deformStroke(GpencilModifierData *md, if (!is_stroke_affected_by_modifier(ob, mmd->layername, + mmd->materialname, mmd->pass_index, mmd->layer_pass, 1, @@ -85,7 +87,8 @@ static void deformStroke(GpencilModifierData *md, gps, mmd->flag & GP_LATTICE_INVERT_LAYER, mmd->flag & GP_LATTICE_INVERT_PASS, - mmd->flag & GP_LATTICE_INVERT_LAYERPASS)) { + mmd->flag & GP_LATTICE_INVERT_LAYERPASS, + mmd->flag & GP_LATTICE_INVERT_MATERIAL)) { return; } diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilmirror.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilmirror.c index 058f60a69ac..112dfc2e9dc 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencilmirror.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilmirror.c @@ -57,6 +57,7 @@ static void initData(GpencilModifierData *md) MirrorGpencilModifierData *gpmd = (MirrorGpencilModifierData *)md; gpmd->pass_index = 0; gpmd->layername[0] = '\0'; + gpmd->materialname[0] = '\0'; gpmd->object = NULL; gpmd->flag |= GP_MIRROR_AXIS_X; } @@ -134,6 +135,7 @@ static void generateStrokes(GpencilModifierData *md, for (i = 0, gps = gpf->strokes.first; i < tot_strokes; i++, gps = gps->next) { if (is_stroke_affected_by_modifier(ob, mmd->layername, + mmd->materialname, mmd->pass_index, mmd->layer_pass, 1, @@ -141,7 +143,8 @@ static void generateStrokes(GpencilModifierData *md, gps, mmd->flag & GP_MIRROR_INVERT_LAYER, mmd->flag & GP_MIRROR_INVERT_PASS, - mmd->flag & GP_MIRROR_INVERT_LAYERPASS)) { + mmd->flag & GP_MIRROR_INVERT_LAYERPASS, + mmd->flag & GP_MIRROR_INVERT_MATERIAL)) { gps_new = BKE_gpencil_stroke_duplicate(gps); update_position(ob, mmd, gps_new, xi); BLI_addtail(&gpf->strokes, gps_new); diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilnoise.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilnoise.c index 2c4d99adeee..b286b55829e 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencilnoise.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilnoise.c @@ -55,6 +55,7 @@ static void initData(GpencilModifierData *md) gpmd->flag |= GP_NOISE_USE_RANDOM; gpmd->factor = 0.5f; gpmd->layername[0] = '\0'; + gpmd->materialname[0] = '\0'; gpmd->vgname[0] = '\0'; gpmd->step = 1; gpmd->seed = 0; @@ -92,6 +93,7 @@ static void deformStroke(GpencilModifierData *md, if (!is_stroke_affected_by_modifier(ob, mmd->layername, + mmd->materialname, mmd->pass_index, mmd->layer_pass, 1, @@ -99,7 +101,8 @@ static void deformStroke(GpencilModifierData *md, gps, mmd->flag & GP_NOISE_INVERT_LAYER, mmd->flag & GP_NOISE_INVERT_PASS, - mmd->flag & GP_NOISE_INVERT_LAYERPASS)) { + mmd->flag & GP_NOISE_INVERT_LAYERPASS, + mmd->flag & GP_NOISE_INVERT_MATERIAL)) { return; } diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpenciloffset.c b/source/blender/gpencil_modifiers/intern/MOD_gpenciloffset.c index 399fc407455..08f67eedc86 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpenciloffset.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpenciloffset.c @@ -48,6 +48,7 @@ static void initData(GpencilModifierData *md) OffsetGpencilModifierData *gpmd = (OffsetGpencilModifierData *)md; gpmd->pass_index = 0; gpmd->layername[0] = '\0'; + gpmd->materialname[0] = '\0'; gpmd->vgname[0] = '\0'; ARRAY_SET_ITEMS(gpmd->loc, 0.0f, 0.0f, 0.0f); ARRAY_SET_ITEMS(gpmd->rot, 0.0f, 0.0f, 0.0f); @@ -75,6 +76,7 @@ static void deformStroke(GpencilModifierData *md, if (!is_stroke_affected_by_modifier(ob, mmd->layername, + mmd->materialname, mmd->pass_index, mmd->layer_pass, 1, @@ -82,7 +84,8 @@ static void deformStroke(GpencilModifierData *md, gps, mmd->flag & GP_OFFSET_INVERT_LAYER, mmd->flag & GP_OFFSET_INVERT_PASS, - mmd->flag & GP_OFFSET_INVERT_LAYERPASS)) { + mmd->flag & GP_OFFSET_INVERT_LAYERPASS, + mmd->flag & GP_OFFSET_INVERT_MATERIAL)) { return; } diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c index 36a1c3db700..346d1e834a6 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c @@ -52,6 +52,7 @@ static void initData(GpencilModifierData *md) gpmd->pass_index = 0; gpmd->factor = 1.0f; gpmd->layername[0] = '\0'; + gpmd->materialname[0] = '\0'; gpmd->vgname[0] = '\0'; gpmd->flag |= GP_OPACITY_CREATE_COLORS; gpmd->modify_color = GP_MODIFY_COLOR_BOTH; @@ -75,6 +76,7 @@ static void deformStroke(GpencilModifierData *md, if (!is_stroke_affected_by_modifier(ob, mmd->layername, + mmd->materialname, mmd->pass_index, mmd->layer_pass, 1, @@ -82,7 +84,8 @@ static void deformStroke(GpencilModifierData *md, gps, mmd->flag & GP_OPACITY_INVERT_LAYER, mmd->flag & GP_OPACITY_INVERT_PASS, - mmd->flag & GP_OPACITY_INVERT_LAYERPASS)) { + mmd->flag & GP_OPACITY_INVERT_LAYERPASS, + mmd->flag & GP_OPACITY_INVERT_MATERIAL)) { return; } diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilsimplify.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilsimplify.c index 2168e7f07ec..25a56c4385c 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencilsimplify.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilsimplify.c @@ -48,6 +48,7 @@ static void initData(GpencilModifierData *md) gpmd->length = 0.1f; gpmd->distance = 0.1f; gpmd->layername[0] = '\0'; + gpmd->materialname[0] = '\0'; } static void copyData(const GpencilModifierData *md, GpencilModifierData *target) @@ -66,6 +67,7 @@ static void deformStroke(GpencilModifierData *md, if (!is_stroke_affected_by_modifier(ob, mmd->layername, + mmd->materialname, mmd->pass_index, mmd->layer_pass, mmd->mode == GP_SIMPLIFY_SAMPLE ? 3 : 4, @@ -73,7 +75,8 @@ static void deformStroke(GpencilModifierData *md, gps, mmd->flag & GP_SIMPLIFY_INVERT_LAYER, mmd->flag & GP_SIMPLIFY_INVERT_PASS, - mmd->flag & GP_SIMPLIFY_INVERT_LAYERPASS)) { + mmd->flag & GP_SIMPLIFY_INVERT_LAYERPASS, + mmd->flag & GP_SIMPLIFY_INVERT_MATERIAL)) { return; } diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilsmooth.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilsmooth.c index 7c639bd8af0..5ec7fe4ff18 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencilsmooth.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilsmooth.c @@ -46,6 +46,7 @@ static void initData(GpencilModifierData *md) gpmd->flag |= GP_SMOOTH_MOD_LOCATION; gpmd->factor = 0.5f; gpmd->layername[0] = '\0'; + gpmd->materialname[0] = '\0'; gpmd->vgname[0] = '\0'; gpmd->step = 1; } @@ -68,6 +69,7 @@ static void deformStroke(GpencilModifierData *md, if (!is_stroke_affected_by_modifier(ob, mmd->layername, + mmd->materialname, mmd->pass_index, mmd->layer_pass, 3, @@ -75,7 +77,8 @@ static void deformStroke(GpencilModifierData *md, gps, mmd->flag & GP_SMOOTH_INVERT_LAYER, mmd->flag & GP_SMOOTH_INVERT_PASS, - mmd->flag & GP_SMOOTH_INVERT_LAYERPASS)) { + mmd->flag & GP_SMOOTH_INVERT_LAYERPASS, + mmd->flag & GP_SMOOTH_INVERT_MATERIAL)) { return; } diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilsubdiv.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilsubdiv.c index c8962cd58c9..741555722b5 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencilsubdiv.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilsubdiv.c @@ -47,6 +47,7 @@ static void initData(GpencilModifierData *md) gpmd->pass_index = 0; gpmd->level = 1; gpmd->layername[0] = '\0'; + gpmd->materialname[0] = '\0'; } static void copyData(const GpencilModifierData *md, GpencilModifierData *target) @@ -66,6 +67,7 @@ static void deformStroke(GpencilModifierData *md, if (!is_stroke_affected_by_modifier(ob, mmd->layername, + mmd->materialname, mmd->pass_index, mmd->layer_pass, 3, @@ -73,7 +75,8 @@ static void deformStroke(GpencilModifierData *md, gps, mmd->flag & GP_SUBDIV_INVERT_LAYER, mmd->flag & GP_SUBDIV_INVERT_PASS, - mmd->flag & GP_SUBDIV_INVERT_LAYERPASS)) { + mmd->flag & GP_SUBDIV_INVERT_LAYERPASS, + mmd->flag & GP_SUBDIV_INVERT_MATERIAL)) { return; } diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilthick.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilthick.c index 8ab72716f4d..29e933e26df 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencilthick.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilthick.c @@ -47,6 +47,7 @@ static void initData(GpencilModifierData *md) gpmd->pass_index = 0; gpmd->thickness = 2; gpmd->layername[0] = '\0'; + gpmd->materialname[0] = '\0'; gpmd->vgname[0] = '\0'; gpmd->curve_thickness = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f); if (gpmd->curve_thickness) { @@ -91,6 +92,7 @@ static void deformStroke(GpencilModifierData *md, if (!is_stroke_affected_by_modifier(ob, mmd->layername, + mmd->materialname, mmd->pass_index, mmd->layer_pass, 1, @@ -98,7 +100,8 @@ static void deformStroke(GpencilModifierData *md, gps, mmd->flag & GP_THICK_INVERT_LAYER, mmd->flag & GP_THICK_INVERT_PASS, - mmd->flag & GP_THICK_INVERT_LAYERPASS)) { + mmd->flag & GP_THICK_INVERT_LAYERPASS, + mmd->flag & GP_THICK_INVERT_MATERIAL)) { return; } diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpenciltint.c b/source/blender/gpencil_modifiers/intern/MOD_gpenciltint.c index d70d975c3a7..bfb2c62cef6 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpenciltint.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpenciltint.c @@ -50,6 +50,7 @@ static void initData(GpencilModifierData *md) gpmd->pass_index = 0; gpmd->factor = 0.5f; gpmd->layername[0] = '\0'; + gpmd->materialname[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; @@ -72,6 +73,7 @@ static void deformStroke(GpencilModifierData *md, if (!is_stroke_affected_by_modifier(ob, mmd->layername, + mmd->materialname, mmd->pass_index, mmd->layer_pass, 1, @@ -79,7 +81,8 @@ static void deformStroke(GpencilModifierData *md, gps, mmd->flag & GP_TINT_INVERT_LAYER, mmd->flag & GP_TINT_INVERT_PASS, - mmd->flag & GP_TINT_INVERT_LAYERPASS)) { + mmd->flag & GP_TINT_INVERT_LAYERPASS, + mmd->flag & GP_TINT_INVERT_MATERIAL)) { return; } |