diff options
author | Antonioya <blendergit@gmail.com> | 2018-09-29 17:42:33 +0300 |
---|---|---|
committer | Antonioya <blendergit@gmail.com> | 2018-09-29 17:54:16 +0300 |
commit | 631ddc5acc1369b66450ebf7ef1f1e894f5e4223 (patch) | |
tree | 9750a57b6176d676d6cb75a2ad7c9ab2a7826cda /source | |
parent | 2ca67de9609e297ed608469fd6a0d3a9dd9cad2f (diff) |
GP: New parameters for instance modifier: Material and On Top
Now it's possible to define what material is used in the generated strokes and if the strokes are put in front of the original (default) or keep the original in front.
Before, the generated strokes have been always on top of the original because they were drawn later.
Diffstat (limited to 'source')
3 files changed, 25 insertions, 1 deletions
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilinstance.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilinstance.c index 3f4183e5b7a..8c125ebb1cd 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencilinstance.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilinstance.c @@ -180,6 +180,11 @@ static void generate_geometry( mul_m4_v3(mat, &pt->x); } + /* if replace material, use new one */ + if ((mmd->mat_rpl > 0) && (mmd->mat_rpl <= ob->totcol)) { + gps_dst->mat_nr = mmd->mat_rpl - 1; + } + /* Add new stroke to cache, to be added to the frame once * all duplicates have been made */ @@ -191,7 +196,12 @@ static void generate_geometry( } /* merge newly created stroke instances back into the main stroke list */ - BLI_movelisttolist(&gpf->strokes, &stroke_cache); + if (mmd->flag & GP_INSTANCE_KEEP_ONTOP) { + BLI_movelisttolist_reverse(&gpf->strokes, &stroke_cache); + } + else { + BLI_movelisttolist(&gpf->strokes, &stroke_cache); + } /* free temp data */ MEM_SAFE_FREE(valid_strokes); diff --git a/source/blender/makesdna/DNA_gpencil_modifier_types.h b/source/blender/makesdna/DNA_gpencil_modifier_types.h index ae341b24e41..26b3cf934d4 100644 --- a/source/blender/makesdna/DNA_gpencil_modifier_types.h +++ b/source/blender/makesdna/DNA_gpencil_modifier_types.h @@ -211,6 +211,8 @@ typedef struct InstanceGpencilModifierData { int pass_index; /* custom index for passes */ char layername[64]; /* layer name */ + int mat_rpl; /* material replace (0 keep default) */ + char pad[4]; } InstanceGpencilModifierData; typedef enum eInstanceGpencil_Flag { @@ -218,6 +220,7 @@ typedef enum eInstanceGpencil_Flag { GP_INSTANCE_RANDOM_ROT = (1 << 1), GP_INSTANCE_INVERT_LAYER = (1 << 2), GP_INSTANCE_INVERT_PASS = (1 << 3), + GP_INSTANCE_KEEP_ONTOP = (1 << 4), } eInstanceGpencil_Flag; typedef struct BuildGpencilModifierData { diff --git a/source/blender/makesrna/intern/rna_gpencil_modifier.c b/source/blender/makesrna/intern/rna_gpencil_modifier.c index 4afd6c4172d..b45ef341187 100644 --- a/source/blender/makesrna/intern/rna_gpencil_modifier.c +++ b/source/blender/makesrna/intern/rna_gpencil_modifier.c @@ -922,6 +922,12 @@ static void rna_def_modifier_gpencilinstance(BlenderRNA *brna) RNA_def_property_range(prop, -10.0, 10.0); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); + prop = RNA_def_property(srna, "replace_material", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "mat_rpl"); + RNA_def_property_range(prop, 0, INT_MAX); + RNA_def_property_ui_text(prop, "Material", "Index of the material used for generated strokes (0 keep original material)"); + RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); + prop = RNA_def_property(srna, "invert_layers", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_INSTANCE_INVERT_LAYER); RNA_def_property_ui_text(prop, "Inverse Layers", "Inverse filter"); @@ -932,6 +938,11 @@ static void rna_def_modifier_gpencilinstance(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter"); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); + prop = RNA_def_property(srna, "keep_on_top", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_INSTANCE_KEEP_ONTOP); + RNA_def_property_ui_text(prop, "Keep On Top", + "Keep the original stroke in front of new instances (only affect by layer)"); + RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); } static void rna_def_modifier_gpencilbuild(BlenderRNA *brna) |