[Bf-blender-cvs] [d63956d0e51] master: GPencil: Replace material name with material pointer for Modifiers filter

Antonio Vazquez noreply at git.blender.org
Mon May 11 16:34:26 CEST 2020


Commit: d63956d0e51c1b5a65941b918d0e055b1c14fa4b
Author: Antonio Vazquez
Date:   Mon May 11 16:18:08 2020 +0200
Branches: master
https://developer.blender.org/rBd63956d0e51c1b5a65941b918d0e055b1c14fa4b

GPencil: Replace material name with material pointer for Modifiers filter

Before, the material name was used to filter the effect of the stroke, but after the last changes in the ID code, now it's not working.

After talking with @severin, we agreed to replace the material name with a pointer. Also, this fix a design issue when the materials were linked.

Related to T76594

Differential Revision: https://developer.blender.org/D7681  with some minor changes

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

M	release/scripts/startup/bl_ui/properties_data_modifier.py
M	source/blender/blenloader/intern/versioning_280.c
M	source/blender/gpencil_modifiers/intern/MOD_gpencil_util.c
M	source/blender/gpencil_modifiers/intern/MOD_gpencil_util.h
M	source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c
M	source/blender/gpencil_modifiers/intern/MOD_gpencilcolor.c
M	source/blender/gpencil_modifiers/intern/MOD_gpencilhook.c
M	source/blender/gpencil_modifiers/intern/MOD_gpencillattice.c
M	source/blender/gpencil_modifiers/intern/MOD_gpencilmirror.c
M	source/blender/gpencil_modifiers/intern/MOD_gpencilmultiply.c
M	source/blender/gpencil_modifiers/intern/MOD_gpencilnoise.c
M	source/blender/gpencil_modifiers/intern/MOD_gpenciloffset.c
M	source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c
M	source/blender/gpencil_modifiers/intern/MOD_gpencilsimplify.c
M	source/blender/gpencil_modifiers/intern/MOD_gpencilsmooth.c
M	source/blender/gpencil_modifiers/intern/MOD_gpencilsubdiv.c
M	source/blender/gpencil_modifiers/intern/MOD_gpenciltexture.c
M	source/blender/gpencil_modifiers/intern/MOD_gpencilthick.c
M	source/blender/gpencil_modifiers/intern/MOD_gpenciltint.c
M	source/blender/makesdna/DNA_gpencil_modifier_types.h
M	source/blender/makesrna/intern/rna_gpencil_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 29fcb06ac67..b5f087fd5ee 100644
--- a/release/scripts/startup/bl_ui/properties_data_modifier.py
+++ b/release/scripts/startup/bl_ui/properties_data_modifier.py
@@ -1855,7 +1855,6 @@ class DATA_PT_gpencil_modifiers(ModifierButtonsPanel, Panel):
     # the mt.type enum is (ab)used for a lookup on function names
     # ...to avoid lengthy if statements
     # so each type must have a function here.
-
     def gpencil_masking(self, layout, ob, md, use_vertex, use_curve=False):
         gpd = ob.data
         layout.separator()
@@ -1884,7 +1883,15 @@ class DATA_PT_gpencil_modifiers(ModifierButtonsPanel, Panel):
         split = col2.split(factor=0.6)
 
         row = split.row(align=True)
-        row.prop_search(md, "material", gpd, "materials", text="", icon='SHADING_TEXTURE')
+
+        valid = md.material in (slot.material for slot in ob.material_slots) or md.material is None
+        if valid:
+            icon = 'SHADING_TEXTURE'
+        else:
+            icon = 'ERROR'
+
+        row.alert = not valid
+        row.prop_search(md, "material", gpd, "materials", text="", icon=icon)
         row.prop(md, "invert_materials", text="", icon='ARROW_LEFTRIGHT')
 
         row = split.row(align=True)
diff --git a/source/blender/blenloader/intern/versioning_280.c b/source/blender/blenloader/intern/versioning_280.c
index cc9a23dbf68..2e81372aab6 100644
--- a/source/blender/blenloader/intern/versioning_280.c
+++ b/source/blender/blenloader/intern/versioning_280.c
@@ -1750,6 +1750,144 @@ void do_versions_after_linking_280(Main *bmain, ReportList *UNUSED(reports))
     }
   }
 
+  if (!MAIN_VERSION_ATLEAST(bmain, 290, 0)) {
+    /* Patch old grease pencil modifiers material filter. */
+    LISTBASE_FOREACH (Object *, ob, &bmain->objects) {
+      LISTBASE_FOREACH (GpencilModifierData *, md, &ob->greasepencil_modifiers) {
+        switch (md->type) {
+          case eGpencilModifierType_Array: {
+            ArrayGpencilModifierData *gpmd = (ArrayGpencilModifierData *)md;
+            if (gpmd->materialname[0] != '\0') {
+              gpmd->material = BLI_findstring(
+                  &bmain->materials, gpmd->materialname, offsetof(ID, name) + 2);
+              gpmd->materialname[0] = '\0';
+            }
+            break;
+          }
+          case eGpencilModifierType_Color: {
+            ColorGpencilModifierData *gpmd = (ColorGpencilModifierData *)md;
+            if (gpmd->materialname[0] != '\0') {
+              gpmd->material = BLI_findstring(
+                  &bmain->materials, gpmd->materialname, offsetof(ID, name) + 2);
+              gpmd->materialname[0] = '\0';
+            }
+            break;
+          }
+          case eGpencilModifierType_Hook: {
+            HookGpencilModifierData *gpmd = (HookGpencilModifierData *)md;
+            if (gpmd->materialname[0] != '\0') {
+              gpmd->material = BLI_findstring(
+                  &bmain->materials, gpmd->materialname, offsetof(ID, name) + 2);
+              gpmd->materialname[0] = '\0';
+            }
+            break;
+          }
+          case eGpencilModifierType_Lattice: {
+            LatticeGpencilModifierData *gpmd = (LatticeGpencilModifierData *)md;
+            if (gpmd->materialname[0] != '\0') {
+              gpmd->material = BLI_findstring(
+                  &bmain->materials, gpmd->materialname, offsetof(ID, name) + 2);
+              gpmd->materialname[0] = '\0';
+            }
+            break;
+          }
+          case eGpencilModifierType_Mirror: {
+            MirrorGpencilModifierData *gpmd = (MirrorGpencilModifierData *)md;
+            if (gpmd->materialname[0] != '\0') {
+              gpmd->material = BLI_findstring(
+                  &bmain->materials, gpmd->materialname, offsetof(ID, name) + 2);
+              gpmd->materialname[0] = '\0';
+            }
+            break;
+          }
+          case eGpencilModifierType_Multiply: {
+            MultiplyGpencilModifierData *gpmd = (MultiplyGpencilModifierData *)md;
+            if (gpmd->materialname[0] != '\0') {
+              gpmd->material = BLI_findstring(
+                  &bmain->materials, gpmd->materialname, offsetof(ID, name) + 2);
+              gpmd->materialname[0] = '\0';
+            }
+            break;
+          }
+          case eGpencilModifierType_Noise: {
+            NoiseGpencilModifierData *gpmd = (NoiseGpencilModifierData *)md;
+            if (gpmd->materialname[0] != '\0') {
+              gpmd->material = BLI_findstring(
+                  &bmain->materials, gpmd->materialname, offsetof(ID, name) + 2);
+              gpmd->materialname[0] = '\0';
+            }
+            break;
+          }
+          case eGpencilModifierType_Offset: {
+            OffsetGpencilModifierData *gpmd = (OffsetGpencilModifierData *)md;
+            if (gpmd->materialname[0] != '\0') {
+              gpmd->material = BLI_findstring(
+                  &bmain->materials, gpmd->materialname, offsetof(ID, name) + 2);
+              gpmd->materialname[0] = '\0';
+            }
+            break;
+          }
+          case eGpencilModifierType_Opacity: {
+            OpacityGpencilModifierData *gpmd = (OpacityGpencilModifierData *)md;
+            if (gpmd->materialname[0] != '\0') {
+              gpmd->material = BLI_findstring(
+                  &bmain->materials, gpmd->materialname, offsetof(ID, name) + 2);
+              gpmd->materialname[0] = '\0';
+            }
+            break;
+          }
+          case eGpencilModifierType_Simplify: {
+            SimplifyGpencilModifierData *gpmd = (SimplifyGpencilModifierData *)md;
+            if (gpmd->materialname[0] != '\0') {
+              gpmd->material = BLI_findstring(
+                  &bmain->materials, gpmd->materialname, offsetof(ID, name) + 2);
+              gpmd->materialname[0] = '\0';
+            }
+            break;
+          }
+          case eGpencilModifierType_Smooth: {
+            SmoothGpencilModifierData *gpmd = (SmoothGpencilModifierData *)md;
+            if (gpmd->materialname[0] != '\0') {
+              gpmd->material = BLI_findstring(
+                  &bmain->materials, gpmd->materialname, offsetof(ID, name) + 2);
+              gpmd->materialname[0] = '\0';
+            }
+            break;
+          }
+          case eGpencilModifierType_Subdiv: {
+            SubdivGpencilModifierData *gpmd = (SubdivGpencilModifierData *)md;
+            if (gpmd->materialname[0] != '\0') {
+              gpmd->material = BLI_findstring(
+                  &bmain->materials, gpmd->materialname, offsetof(ID, name) + 2);
+              gpmd->materialname[0] = '\0';
+            }
+            break;
+          }
+          case eGpencilModifierType_Texture: {
+            TextureGpencilModifierData *gpmd = (TextureGpencilModifierData *)md;
+            if (gpmd->materialname[0] != '\0') {
+              gpmd->material = BLI_findstring(
+                  &bmain->materials, gpmd->materialname, offsetof(ID, name) + 2);
+              gpmd->materialname[0] = '\0';
+            }
+            break;
+          }
+          case eGpencilModifierType_Thick: {
+            ThickGpencilModifierData *gpmd = (ThickGpencilModifierData *)md;
+            if (gpmd->materialname[0] != '\0') {
+              gpmd->material = BLI_findstring(
+                  &bmain->materials, gpmd->materialname, offsetof(ID, name) + 2);
+              gpmd->materialname[0] = '\0';
+            }
+            break;
+          }
+          default:
+            break;
+        }
+      }
+    }
+  }
+
   /**
    * Versioning code until next subversion bump goes here.
    *
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencil_util.c b/source/blender/gpencil_modifiers/intern/MOD_gpencil_util.c
index f7b51b08c44..f7929b58650 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencil_util.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencil_util.c
@@ -79,7 +79,7 @@ void gpencil_modifier_type_init(GpencilModifierTypeInfo *types[])
 /* verify if valid layer, material and pass index */
 bool is_stroke_affected_by_modifier(Object *ob,
                                     char *mlayername,
-                                    char *mmaterialname,
+                                    Material *material,
                                     const int mpassindex,
                                     const int gpl_passindex,
                                     const int minpoints,
@@ -106,15 +106,15 @@ bool is_stroke_affected_by_modifier(Object *ob,
       }
     }
   }
-  /* omit if filter by material */
-  if (mmaterialname[0] != '\0') {
+  /* Omit if filter by material. */
+  if (material != NULL) {
     if (inv4 == false) {
-      if (!STREQ(mmaterialname, ma->id.name + 2)) {
+      if (material != ma) {
         return false;
       }
     }
     else {
-      if (STREQ(mmaterialname, ma->id.name + 2)) {
+      if (material == ma) {
         return false;
       }
     }
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencil_util.h b/source/blender/gpencil_modifiers/intern/MOD_gpencil_util.h
index fc4522bc028..5cc3750639b 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencil_util.h
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencil_util.h
@@ -34,7 +34,7 @@ struct bGPDstroke;
 
 bool is_stroke_affected_by_modifier(struct Object *ob,
                                     char *mlayername,
-                                    char *mmaterialname,
+                                    struct Material *material,
                                     const int mpassindex,
                                     const int gpl_passindex,
                                     const int minpoints,
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c
index 5aa3f70d940..18de9c1cf83 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c
@@ -77,6 +77,8 @@ static void initData(GpencilModifierData *md)
   gpmd->

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list