[Bf-blender-cvs] [0cb40164f82] greasepencil-object: Convert old 2.7x files from Palettes to Materials

Antonio Vazquez noreply at git.blender.org
Fri Apr 27 17:29:31 CEST 2018


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")) {



More information about the Bf-blender-cvs mailing list