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