Commit: 4f504f27802cd62827e59ad75250f8cfff3d5ef2
Author: Antonio Vazquez
Date:   Fri Feb 23 23:33:57 2018 +0100
Branches: greasepencil-object
https://developer.blender.org/rB4f504f27802cd62827e59ad75250f8cfff3d5ef2

Update strokes UV when change UV factor in color

Recalc UV data for any stroke that is using the color.

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

M       source/blender/editors/gpencil/gpencil_utils.c
M       source/blender/editors/include/ED_gpencil.h
M       source/blender/makesrna/intern/rna_palette.c

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

diff --git a/source/blender/editors/gpencil/gpencil_utils.c 
b/source/blender/editors/gpencil/gpencil_utils.c
index 72b04941730..c482dcc2d95 100644
--- a/source/blender/editors/gpencil/gpencil_utils.c
+++ b/source/blender/editors/gpencil/gpencil_utils.c
@@ -48,6 +48,7 @@
 #include "DNA_space_types.h"
 #include "DNA_view3d_types.h"
 
+#include "BKE_main.h"
 #include "BKE_context.h"
 #include "BKE_gpencil.h"
 #include "BKE_object.h"
@@ -1618,5 +1619,33 @@ void ED_gpencil_calc_stroke_uv(bGPDstroke *gps)
        }
 }
 
+/* recalc uv for any stroke using the color */
+void ED_gpencil_update_color_uv(Main *bmain, Palette *palette, PaletteColor 
*palcolor)
+{
+       /* read all strokes  */
+       for (bGPdata *gpd = bmain->gpencil.first; gpd; gpd = gpd->id.next) {
+               for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) {
+                       /* only editable and visible layers are considered */
+                       if (gpencil_layer_is_editable(gpl)) {
+                               for (bGPDframe *gpf = gpl->frames.first; gpf; 
gpf = gpf->next) {
+                                       for (bGPDstroke *gps = 
gpf->strokes.first; gps; gps = gps->next) {
+                                               /* check if the color is 
editable */
+                                               if 
(ED_gpencil_stroke_color_use(gpl, gps) == false) {
+                                                       continue;
+                                               }
+                                               if (gps->palette != palette) {
+                                                       continue;
+                                               }
+
+                                               /* update */
+                                               if (strcmp(palcolor->info, 
gps->colorname) == 0) {
+                                                       
ED_gpencil_calc_stroke_uv(gps);
+                                               }
+                                       }
+                               }
+                       }
+               }
+       }
+}
 /* ******************************************************** */
 
diff --git a/source/blender/editors/include/ED_gpencil.h 
b/source/blender/editors/include/ED_gpencil.h
index f3c3891a9b1..ea2f8527946 100644
--- a/source/blender/editors/include/ED_gpencil.h
+++ b/source/blender/editors/include/ED_gpencil.h
@@ -41,6 +41,7 @@ struct bGPDframe;
 struct bGPDstroke;
 struct bGPDspoint;
 
+struct Main;
 struct bContext;
 struct EvaluationContext;
 struct Depsgraph;
@@ -214,5 +215,6 @@ int ED_gpencil_join_objects_exec(struct bContext *C, struct 
wmOperator *op);
 /* texture coordinate utilities */
 void ED_gpencil_tpoint_to_point(struct Scene *scene, struct ARegion *ar, 
struct View3D *v3d, float origin[3], const struct tGPspoint *tpt, struct 
bGPDspoint *pt);
 void ED_gpencil_calc_stroke_uv(struct bGPDstroke *gps);
+void ED_gpencil_update_color_uv(struct Main *bmain, struct Palette *palette, 
struct PaletteColor *palcolor);
 
 #endif /*  __ED_GPENCIL_H__ */
diff --git a/source/blender/makesrna/intern/rna_palette.c 
b/source/blender/makesrna/intern/rna_palette.c
index f7c268d374f..bbe4298f7a3 100644
--- a/source/blender/makesrna/intern/rna_palette.c
+++ b/source/blender/makesrna/intern/rna_palette.c
@@ -62,6 +62,16 @@ static void rna_Palette_dependency_update(Main 
*UNUSED(bmain), Scene *UNUSED(sce
        WM_main_add_notifier(NC_GPENCIL | NA_EDITED, NULL);
 }
 
+static void rna_Palette_uv_update(Main *bmain, Scene *scene, PointerRNA *ptr)
+{
+       /* update all uv strokes of this color */
+       Palette *palette = ptr->id.data;
+       PaletteColor *palcolor = (PaletteColor *)ptr->data;
+       ED_gpencil_update_color_uv(bmain, palette, palcolor);
+
+       rna_Palette_dependency_update(bmain, scene, ptr);
+}
+
 static PaletteColor *rna_Palette_color_new(Palette *palette)
 {
        PaletteColor *color = BKE_palette_color_add(palette);
@@ -387,7 +397,7 @@ static void rna_def_palettecolor(BlenderRNA *brna)
        RNA_def_property_float_sdna(prop, NULL, "t_pixsize");
        RNA_def_property_range(prop, 1, 5000);
        RNA_def_property_ui_text(prop, "UV Factor", "Texture Pixel Size factor 
along the stroke");
-       RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS | ND_DATA | 
NC_GPENCIL, "rna_Palette_dependency_update");
+       RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS | ND_DATA | 
NC_GPENCIL, "rna_Palette_uv_update");
 
        /* Flags */
        prop = RNA_def_property(srna, "hide", PROP_BOOLEAN, PROP_NONE);

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to