Commit: 0cb40164f82546a81e9485378c31fa36e0a7392e
Author: Antonio Vazquez
Date:   Fri Apr 27 17:29:22 2018 +0200
Branches: greasepencil-object
https://developer.blender.org/rB0cb40164f82546a81e9485378c31fa36e0a7392e

Convert old 2.7x files from Palettes to Materials

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

M       source/blender/blenkernel/intern/gpencil.c
M       source/blender/blenloader/intern/readfile.c
M       source/blender/blenloader/intern/versioning_280.c

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

diff --git a/source/blender/blenkernel/intern/gpencil.c 
b/source/blender/blenkernel/intern/gpencil.c
index 277bf5afe8d..e9c9930224e 100644
--- a/source/blender/blenkernel/intern/gpencil.c
+++ b/source/blender/blenkernel/intern/gpencil.c
@@ -1043,7 +1043,11 @@ void BKE_gpencil_layer_delete(bGPdata *gpd, bGPDlayer 
*gpl)
 
 Material *BKE_gpencil_get_color_from_brush(Brush *brush)
 {
-       Material *mat = brush->material;
+       Material *mat = NULL;
+               
+       if ((brush != NULL) && (brush->material != NULL)) {
+               brush->material;
+       }
 
        return mat;
 }
diff --git a/source/blender/blenloader/intern/readfile.c 
b/source/blender/blenloader/intern/readfile.c
index afacc4acc6a..893d6aa1685 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -6334,6 +6334,7 @@ static void direct_link_gpencil(FileData *fd, bGPdata 
*gpd)
        bGPDframe *gpf;
        bGPDstroke *gps;
        bGPDspoint *pt;
+       bGPDpalette *palette;
 
        /* we must firstly have some grease-pencil data to link! */
        if (gpd == NULL)
@@ -6343,6 +6344,14 @@ static void direct_link_gpencil(FileData *fd, bGPdata 
*gpd)
        gpd->adt = newdataadr(fd, gpd->adt);
        direct_link_animdata(fd, gpd->adt);
 
+       /* relink palettes (old palettes deprecated, only to convert old files) 
*/
+       link_list(fd, &gpd->palettes);
+       if (gpd->palettes.first != NULL) {
+               for (palette = gpd->palettes.first; palette; palette = 
palette->next) {
+                       link_list(fd, &palette->colors);
+               }
+       }
+
        /* clear drawing cache */
        gpd->batch_cache_data = NULL;
 
diff --git a/source/blender/blenloader/intern/versioning_280.c 
b/source/blender/blenloader/intern/versioning_280.c
index c0db22da717..0fe3196dacc 100644
--- a/source/blender/blenloader/intern/versioning_280.c
+++ b/source/blender/blenloader/intern/versioning_280.c
@@ -710,10 +710,40 @@ void do_versions_after_linking_280(Main *main)
 
                        ob = BKE_object_add_for_data(main, scene, view_layer, 
OB_GPENCIL, "GP_Scene", &scene->gpd->id, false);
                        zero_v3(ob->loc);
-                       scene->gpd = NULL;
+
+                       /* convert grease pencil palettes (version >= 2.78)  to 
materials */
+                       bGPdata *gpd = scene->gpd;
+                       for (const bGPDpalette *palette = gpd->palettes.first; 
palette; palette = palette->next) {
+                               for (bGPDpalettecolor *palcolor = 
palette->colors.first; palcolor; palcolor = palcolor->next) {
+
+                                       /* create material slot */
+                                       BKE_object_material_slot_add(ob);
+                                       Material *ma = 
BKE_material_add_gpencil(main, palcolor->info);
+                                       assign_material(ob, ma, ob->totcol, 
BKE_MAT_ASSIGN_EXISTING);
+
+                                       /* copy color settings */
+                                       GpencilColorData *gpcolor = ma->gpcolor;
+                                       copy_v4_v4(gpcolor->rgb, 
palcolor->color);
+                                       copy_v4_v4(gpcolor->fill, 
palcolor->fill);
+                                       gpcolor->flag = palcolor->flag;
+
+                                       /* fix strokes */
+                                       for (bGPDlayer *gpl = 
gpd->layers.first; gpl; gpl = gpl->next) {
+                                               for (bGPDframe *gpf = 
gpl->frames.first; gpf; gpf = gpf->next) {
+                                                       for (bGPDstroke *gps = 
gpf->strokes.first; gps; gps = gps->next) {
+                                                               if 
(STREQ(gps->colorname, palcolor->info)) {
+                                                                       
gps->mat_nr = ob->totcol - 1;
+                                                               }
+                                                       }
+                                               }
+                                       }
+                               }
+                       }
 
                        /* set cache as dirty */
                        BKE_gpencil_batch_cache_dirty(ob->data);
+
+                       scene->gpd = NULL;
                }
        }
 
@@ -948,53 +978,6 @@ void blo_do_versions_280(FileData *fd, Library 
*UNUSED(lib), Main *main)
                }
 
                {
-#if 0  /* GPXX */              
-                       /* Convert grease pencil palettes to blender palettes */
-                       if (!DNA_struct_elem_find(fd->filesdna, "bGPDstroke", 
"Palette", "*palette")) {
-                               for (bGPdata *gpd = main->gpencil.first; gpd; 
gpd = gpd->id.next) {
-                                       /* first create all palettes and colors 
*/
-                                       Palette *first = NULL;
-                                       for (bGPDpalette *oldpalette = 
gpd->palettes.first; oldpalette; oldpalette = oldpalette->next) {
-                                               /* create palette */
-                                               bGPDpaletteref *palslot = 
BKE_gpencil_paletteslot_addnew(main, gpd, oldpalette->info);
-                                               Palette *newpalette = 
palslot->palette;
-
-                                               /* save first to use later */
-                                               if (first == NULL) {
-                                                       first = newpalette;
-                                               }
-
-                                               for (bGPDpalettecolor *oldcolor 
= oldpalette->colors.first; oldcolor; oldcolor = oldcolor->next) {
-                                                       PaletteColor *newcolor 
= BKE_palette_color_add_name(newpalette, oldcolor->info);
-                                                       /* set color attributes 
*/
-                                                       
copy_v4_v4(newcolor->rgb, oldcolor->color);
-                                                       
copy_v4_v4(newcolor->fill, oldcolor->fill);
-                                                       newcolor->flag = 
oldcolor->flag;
-                                                       if (oldcolor->flag & 
PAC_COLOR_DOT) {
-                                                               newcolor->mode 
= PAC_MODE_DOTS;
-                                                       }
-                                                       else {
-                                                               newcolor->mode 
= PAC_MODE_LINE;
-                                                       }
-                                               }
-                                               /* set first color active by 
default */
-                                               if 
(!BLI_listbase_is_empty(&newpalette->colors)) {
-                                                       
newpalette->active_color = 0;
-                                               }
-                                       }
-                                       /* second, assign the palette (always 
to first palette) */
-                                       for (bGPDlayer *gpl = 
gpd->layers.first; gpl; gpl = gpl->next) {
-                                               for (bGPDframe *gpf = 
gpl->frames.first; gpf; gpf = gpf->next) {
-                                                       for (bGPDstroke *gps = 
gpf->strokes.first; gps; gps = gps->next) {
-                                                               gps->palette = 
first;
-                                                       }
-                                               }
-                                       }
-                                       gpd->id.tag &= ~LIB_TAG_NEED_LINK; // 
XXX: WHY?!
-                               }
-                       }
-#endif
-
                        /* Grease pencil sculpt and paint cursors */
                        if (!DNA_struct_elem_find(fd->filesdna, 
"GP_BrushEdit_Settings", "int", "weighttype")) {
                                for (Scene *scene = main->scene.first; scene; 
scene = scene->id.next) {
@@ -1212,6 +1195,7 @@ void blo_do_versions_280(FileData *fd, Library 
*UNUSED(lib), Main *main)
                                tex->type = 0;
                        }
                }
+
        }
 
        if (!DNA_struct_find(fd->filesdna, "SpaceTopBar")) {

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

Reply via email to