[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