Commit: 23c42898a1fb090587498e1da062b73659fc38f1
Author: Antonio Vazquez
Date:   Wed Jul 19 14:03:57 2017 +0200
Branches: greasepencil-object
https://developer.blender.org/rB23c42898a1fb090587498e1da062b73659fc38f1

Add inverse filter options for modifiers

===================================================================

M       release/scripts/startup/bl_ui/properties_data_modifier.py
M       source/blender/blenkernel/intern/gpencil.c
M       source/blender/makesdna/DNA_modifier_types.h
M       source/blender/makesrna/intern/rna_modifier.c

===================================================================

diff --git a/release/scripts/startup/bl_ui/properties_data_modifier.py 
b/release/scripts/startup/bl_ui/properties_data_modifier.py
index 0597dc03418..e77ae851db2 100644
--- a/release/scripts/startup/bl_ui/properties_data_modifier.py
+++ b/release/scripts/startup/bl_ui/properties_data_modifier.py
@@ -1544,8 +1544,12 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
 
         col = split.column()
         col.label("Layer:")
-        col.prop_search(md, "layer", gpd, "layers", text="", 
icon="GREASEPENCIL")
-        col.prop(md, "passindex", text="Pass")
+        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(align=True)
         row.label("Affect:")
@@ -1562,12 +1566,15 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
         row = col.row(align=True)
         row.prop(md, "level")
         row.prop(md, "simple", text="", icon="PARTICLE_POINT")
-        col.prop(md, "passindex", text="Pass")
-
+        row = col.row(align=True)
+        row.prop(md, "passindex", text="Pass")
+        row.prop(md, "inverse_pass", text="", icon="ARROW_LEFTRIGHT")
 
         col = split.column()
         col.label("Layer:")
-        col.prop_search(md, "layer", gpd, "layers", text="", 
icon="GREASEPENCIL")
+        row = col.row(align=True)
+        row.prop_search(md, "layer", gpd, "layers", text="", 
icon="GREASEPENCIL")
+        row.prop(md, "inverse_layers", text="", icon="ARROW_LEFTRIGHT")
 
     def GP_THICK(self, layout, ob, md):
         gpd = ob.grease_pencil
@@ -1576,11 +1583,15 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
         col = split.column()
         row = col.row(align=True)
         row.prop(md, "thickness")
-        col.prop(md, "passindex", text="Pass")
+        row = col.row(align=True)
+        row.prop(md, "passindex", text="Pass")
+        row.prop(md, "inverse_pass", text="", icon="ARROW_LEFTRIGHT")
 
         col = split.column()
         col.label("Layer:")
-        col.prop_search(md, "layer", gpd, "layers", text="", 
icon="GREASEPENCIL")
+        row = col.row(align=True)
+        row.prop_search(md, "layer", gpd, "layers", text="", 
icon="GREASEPENCIL")
+        row.prop(md, "inverse_layers", text="", icon="ARROW_LEFTRIGHT")
 
     def GP_TINT(self, layout, ob, md):
         gpd = ob.grease_pencil
@@ -1592,8 +1603,12 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
 
         col = split.column()
         col.label("Layer:")
-        col.prop_search(md, "layer", gpd, "layers", text="", 
icon="GREASEPENCIL")
-        col.prop(md, "passindex", text="Pass")
+        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")
@@ -1608,8 +1623,12 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
 
         col = split.column()
         col.label("Layer:")
-        col.prop_search(md, "layer", gpd, "layers", text="", 
icon="GREASEPENCIL")
-        col.prop(md, "passindex", text="Pass")
+        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")
 
 classes = (
     DATA_PT_modifiers,
diff --git a/source/blender/blenkernel/intern/gpencil.c 
b/source/blender/blenkernel/intern/gpencil.c
index 88b343ca4ed..983ad984169 100644
--- a/source/blender/blenkernel/intern/gpencil.c
+++ b/source/blender/blenkernel/intern/gpencil.c
@@ -1527,17 +1527,31 @@ BoundBox *BKE_gpencil_boundbox_get(Object *ob)
 
 /********************  Modifiers **********************************/
 /* verify if valid layer and pass index */
-static bool is_stroke_affected_by_modifier(char *mlayername, int mpassindex, 
int minpoints, bGPDlayer *gpl, bGPDstroke *gps)
+static bool is_stroke_affected_by_modifier(char *mlayername, int mpassindex, 
int minpoints, bGPDlayer *gpl, bGPDstroke *gps, int inv1, int inv2)
 {
        /* omit if filter by layer */
        if (mlayername[0] != '\0') {
-               if (!STREQ(mlayername, gpl->info)) {
-                       return false;
+               if (inv1 == 0) {
+                       if (!STREQ(mlayername, gpl->info)) {
+                               return false;
+                       }
+               }
+               else {
+                       if (STREQ(mlayername, gpl->info)) {
+                               return false;
+                       }
                }
        }
        /* verify pass */
-       if (gps->palcolor->index != mpassindex) {
-               return false;
+       if (inv2 == 0) {
+               if (gps->palcolor->index != mpassindex) {
+                       return false;
+               }
+       }
+       else {
+               if (gps->palcolor->index == mpassindex) {
+                       return false;
+               }
        }
 
        /* need to have a minimum number of points */
@@ -1590,7 +1604,8 @@ void ED_gpencil_noise_modifier(GpencilNoiseModifierData 
*mmd, bGPDlayer *gpl, bG
        int sc_frame = 0;
        int sc_diff = 0;
 
-       if (!is_stroke_affected_by_modifier(mmd->layername, mmd->passindex, 3, 
gpl, gps)) {
+       if (!is_stroke_affected_by_modifier(mmd->layername, mmd->passindex, 3, 
gpl, gps, 
+               (int) mmd->flag & GP_NOISE_INVERSE_LAYER, (int)mmd->flag & 
GP_NOISE_INVERSE_PASS)) {
                return;
        }
 
@@ -1702,7 +1717,8 @@ void ED_gpencil_subdiv_modifier(GpencilSubdivModifierData 
*mmd, bGPDlayer *gpl,
        int totnewpoints, oldtotpoints;
        int i2;
 
-       if (!is_stroke_affected_by_modifier(mmd->layername, mmd->passindex, 2, 
gpl, gps)) {
+       if (!is_stroke_affected_by_modifier(mmd->layername, mmd->passindex, 3, 
gpl, gps,
+               (int)mmd->flag & GP_SUBDIV_INVERSE_LAYER, (int)mmd->flag & 
GP_SUBDIV_INVERSE_PASS)) {
                return;
        }
 
@@ -1772,7 +1788,8 @@ void ED_gpencil_subdiv_modifier(GpencilSubdivModifierData 
*mmd, bGPDlayer *gpl,
 /* change stroke thickness */
 void ED_gpencil_thick_modifier(GpencilThickModifierData *mmd, bGPDlayer *gpl, 
bGPDstroke *gps)
 {
-       if (!is_stroke_affected_by_modifier(mmd->layername, mmd->passindex, 0, 
gpl, gps)) {
+       if (!is_stroke_affected_by_modifier(mmd->layername, mmd->passindex, 3, 
gpl, gps,
+               (int)mmd->flag & GP_THICK_INVERSE_LAYER, (int)mmd->flag & 
GP_THICK_INVERSE_PASS)) {
                return;
        }
 
@@ -1782,9 +1799,11 @@ void ED_gpencil_thick_modifier(GpencilThickModifierData 
*mmd, bGPDlayer *gpl, bG
 /* tint strokes */
 void ED_gpencil_tint_modifier(GpencilTintModifierData *mmd, bGPDlayer *gpl, 
bGPDstroke *gps)
 {
-       if (!is_stroke_affected_by_modifier(mmd->layername, mmd->passindex, 0, 
gpl, gps)) {
+       if (!is_stroke_affected_by_modifier(mmd->layername, mmd->passindex, 3, 
gpl, gps,
+               (int)mmd->flag & GP_TINT_INVERSE_LAYER, (int)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);
 }
@@ -1796,9 +1815,11 @@ void ED_gpencil_array_modifier(int id, 
GpencilArrayModifierData *mmd, bGPDlayer
        bGPDstroke *gps_dst, *old_gps;
        float offset[3];
 
-       if (!is_stroke_affected_by_modifier(mmd->layername, mmd->passindex, 0, 
gpl, gps)) {
+       if (!is_stroke_affected_by_modifier(mmd->layername, mmd->passindex, 3, 
gpl, gps,
+               (int)mmd->flag & GP_ARRAY_INVERSE_LAYER, (int)mmd->flag & 
GP_ARRAY_INVERSE_PASS)) {
                return;
        }
+
        /* if temp do not apply if was created by previous modifier to avoid 
infinite loop */
        if (gps->flag & GP_STROKE_TEMP) {
                if (gps->mod_idx <= id) {
diff --git a/source/blender/makesdna/DNA_modifier_types.h 
b/source/blender/makesdna/DNA_modifier_types.h
index 3d0513af56f..e4b1e8b7658 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -1636,6 +1636,8 @@ typedef enum eGpencilNoise_Flag {
        GP_NOISE_MOD_THICKNESS  = (1 << 3),
        GP_NOISE_FULL_STROKE    = (1 << 4),
        GP_NOISE_MOVE_EXTREME   = (1 << 5),
+       GP_NOISE_INVERSE_LAYER  = (1 << 6),
+       GP_NOISE_INVERSE_PASS   = (1 << 7),
 } eGpencilNoise_Flag;
 
 
@@ -1649,7 +1651,9 @@ typedef struct GpencilSubdivModifierData {
 } GpencilSubdivModifierData;
 
 typedef enum eGpencilSubdiv_Flag {
-       GP_SUBDIV_SIMPLE      = (1 << 0),
+       GP_SUBDIV_SIMPLE        = (1 << 0),
+       GP_SUBDIV_INVERSE_LAYER = (1 << 1),
+       GP_SUBDIV_INVERSE_PASS  = (1 << 2),
 } eGpencilSubdiv_Flag;
 
 typedef struct GpencilThickModifierData {
@@ -1661,6 +1665,11 @@ typedef struct GpencilThickModifierData {
        char pad[4];
 } GpencilThickModifierData;
 
+typedef enum eGpencilThick_Flag {
+       GP_THICK_INVERSE_LAYER = (1 << 0),
+       GP_THICK_INVERSE_PASS  = (1 << 1),
+} eGpencilThick_Flag;
+
 typedef struct GpencilTintModifierData {
        ModifierData modifier;
        char layername[64];          /* layer name */
@@ -1672,6 +1681,8 @@ typedef struct GpencilTintModifierData {
 
 typedef enum eGpencilTint_Flag {
        GP_TINT_CREATE_COLORS = (1 << 0),
+       GP_TINT_INVERSE_LAYER = (1 << 1),
+       GP_TINT_INVERSE_PASS  = (1 << 2),
 } eGpencilTint_Flag;
 
 typedef struct GpencilArrayModifierData {
@@ -1686,8 +1697,10 @@ typedef struct GpencilArrayModifierData {
 } GpencilArrayModifierData;
 
 typedef enum eGpencilArray_Flag {
-       GP_ARRAY_RANDOM_SIZE = (1 << 0),
-       GP_ARRAY_RANDOM_ROT  = (1 << 1),
+       GP_ARRAY_RANDOM_SIZE   = (1 << 0),
+       GP_ARRAY_RANDOM_ROT    = (1 << 1),
+       GP_ARRAY_INVERSE_LAYER = (1 << 1),
+       GP_ARRAY_INVERSE_PASS  = (1 << 2),
 } eGpencilArray_Flag;
 
 #define MOD_MESHSEQ_READ_ALL \
diff --git a/source/blender/makesrna/intern/rna_modifier.c 
b/source/blender/makesrna/intern/rna_modifier.c
index 1e9661dd212..8bd9b7cf9cc 100644
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@ -4838,6 +4838,16 @@ static void rna_def_modifier_gpencilnoise(BlenderRNA 
*brna)
        RNA_def_property_range(prop, 1, 100);
        RNA_def_property_ui_text(prop, "Step", "Number of frames before 
recalculate random values again");
        RNA_def_property_update(prop, 0, "rna_Mo

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to