[Bf-blender-cvs] [1746aaa86f9] greasepencil-object: WIP: More work converting to materials
Antonio Vazquez
noreply at git.blender.org
Thu Apr 26 12:35:40 CEST 2018
Commit: 1746aaa86f9e4eb0ac2a272984041451f097dead
Author: Antonio Vazquez
Date: Tue Apr 24 13:48:45 2018 +0200
Branches: greasepencil-object
https://developer.blender.org/rB1746aaa86f9e4eb0ac2a272984041451f097dead
WIP: More work converting to materials
There is a problem with the loading of converted files.
The conversion of Hero data is correct, but something is still missing.
===================================================================
M source/blender/blenkernel/intern/library_query.c
M source/blender/blenkernel/intern/material.c
M source/blender/blenloader/intern/readfile.c
M source/blender/blenloader/intern/versioning_280.c
M source/blender/blenloader/intern/writefile.c
M source/blender/makesdna/DNA_gpencil_types.h
M source/blender/makesrna/intern/rna_gpencil.c
===================================================================
diff --git a/source/blender/blenkernel/intern/library_query.c b/source/blender/blenkernel/intern/library_query.c
index d450e7a76aa..4a6e697a5cb 100644
--- a/source/blender/blenkernel/intern/library_query.c
+++ b/source/blender/blenkernel/intern/library_query.c
@@ -933,6 +933,10 @@ void BKE_library_foreach_ID_link(Main *bmain, ID *id, LibraryIDLinkCallback call
case ID_GD:
{
bGPdata *gpencil = (bGPdata *) id;
+ /* materials */
+ for (i = 0; i < gpencil->totcol; i++) {
+ CALLBACK_INVOKE(gpencil->mat[i], IDWALK_CB_USER);
+ }
/* relink palette for all strokes */
for (bGPDlayer *gp_layer = gpencil->layers.first; gp_layer; gp_layer = gp_layer->next) {
diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c
index 7b8e612b506..beb809ccd0a 100644
--- a/source/blender/blenkernel/intern/material.c
+++ b/source/blender/blenkernel/intern/material.c
@@ -43,6 +43,7 @@
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_customdata_types.h"
+#include "DNA_gpencil_types.h"
#include "DNA_ID.h"
#include "DNA_meta_types.h"
#include "DNA_node_types.h"
@@ -242,7 +243,8 @@ Material ***give_matarar(Object *ob)
Mesh *me;
Curve *cu;
MetaBall *mb;
-
+ bGPdata *gpd;
+
if (ob->type == OB_MESH) {
me = ob->data;
return &(me->mat);
@@ -255,6 +257,10 @@ Material ***give_matarar(Object *ob)
mb = ob->data;
return &(mb->mat);
}
+ else if (ob->type == OB_GPENCIL) {
+ gpd = ob->data;
+ return &(gpd->mat);
+ }
return NULL;
}
@@ -263,7 +269,8 @@ short *give_totcolp(Object *ob)
Mesh *me;
Curve *cu;
MetaBall *mb;
-
+ bGPdata *gpd;
+
if (ob->type == OB_MESH) {
me = ob->data;
return &(me->totcol);
@@ -276,6 +283,10 @@ short *give_totcolp(Object *ob)
mb = ob->data;
return &(mb->totcol);
}
+ else if (ob->type == OB_GPENCIL) {
+ gpd = ob->data;
+ return &(gpd->totcol);
+ }
return NULL;
}
@@ -310,6 +321,8 @@ short *give_totcolp_id(ID *id)
return &(((Curve *)id)->totcol);
case ID_MB:
return &(((MetaBall *)id)->totcol);
+ case ID_GD:
+ return &(((bGPdata *)id)->totcol);
default:
break;
}
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 0c1788e8e9b..d9736015f07 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -4118,17 +4118,17 @@ static void lib_link_material(FileData *fd, Main *main)
if (ma->id.tag & LIB_TAG_NEED_LINK) {
IDP_LibLinkProperty(ma->id.properties, fd);
lib_link_animdata(fd, &ma->id, ma->adt);
-
+
ma->ipo = newlibadr_us(fd, ma->id.lib, ma->ipo); // XXX deprecated - old animation system
-
+
if (ma->nodetree) {
lib_link_ntree(fd, &ma->id, ma->nodetree);
ma->nodetree->id.lib = ma->id.lib;
}
-
+
/* relink grease pencil settings */
+ ma->gpcolor = newdataadr(fd, ma->gpcolor);
if (ma->gpcolor != NULL) {
- ma->gpcolor = newlibadr(fd, ma->id.lib, ma->gpcolor);
GpencilColorData *gpcolor = ma->gpcolor;
if (gpcolor->sima != NULL) {
gpcolor->sima = newlibadr(fd, ma->id.lib, gpcolor->sima);
@@ -6396,6 +6396,10 @@ static void direct_link_gpencil(FileData *fd, bGPdata *gpd)
/* clear drawing cache */
gpd->batch_cache_data = NULL;
+ /* materials */
+ gpd->mat = newdataadr(fd, gpd->mat);
+ test_pointer_array(fd, (void **)&gpd->mat);
+
/* relink palettes */
link_list(fd, &gpd->palettes);
for (palette = gpd->palettes.first; palette; palette = palette->next) {
diff --git a/source/blender/blenloader/intern/versioning_280.c b/source/blender/blenloader/intern/versioning_280.c
index f7f1b0f951f..a466e6e8380 100644
--- a/source/blender/blenloader/intern/versioning_280.c
+++ b/source/blender/blenloader/intern/versioning_280.c
@@ -65,6 +65,7 @@
#include "BKE_idprop.h"
#include "BKE_layer.h"
#include "BKE_main.h"
+#include "BKE_material.h"
#include "BKE_mesh.h"
#include "BKE_node.h"
#include "BKE_report.h"
@@ -744,6 +745,64 @@ void do_versions_after_linking_280(Main *main)
}
}
+ /* Special Hero files conversion PaletteColors to Materials */
+ for (Object *ob = main->object.first; ob; ob = ob->id.next) {
+ if ((ob->type == OB_GPENCIL) && (ob->data)) {
+ bGPdata *gpd = ob->data;
+ /* do not convert already converted files */
+ if (gpd->totcol > 0) {
+ continue;
+ }
+ for (const bGPDpaletteref *palslot = gpd->palette_slots.first; palslot; palslot = palslot->next) {
+ Palette *palette = palslot->palette;
+ for (PaletteColor *palcolor = palette->colors.first; palcolor; palcolor = palcolor->next) {
+
+ /* create material slot */
+ BKE_object_material_slot_add(ob);
+ Material *ma = BKE_material_add(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->rgb);
+ copy_v4_v4(gpcolor->fill, palcolor->fill);
+ copy_v4_v4(gpcolor->scolor, palcolor->scolor);
+ gpcolor->flag = palcolor->flag;
+ gpcolor->stroke_style = palcolor->stroke_style;
+ gpcolor->fill_style = palcolor->fill_style;
+ gpcolor->index = palcolor->index;
+ gpcolor->mix_factor = palcolor->mix_factor;
+ gpcolor->g_angle = palcolor->g_angle;
+ gpcolor->g_radius = palcolor->g_radius;
+ gpcolor->g_boxsize = palcolor->g_boxsize;
+ copy_v2_v2(gpcolor->g_scale, palcolor->g_scale);
+ copy_v2_v2(gpcolor->g_shift, palcolor->g_shift);
+ gpcolor->t_angle = palcolor->t_angle;
+ copy_v2_v2(gpcolor->t_scale, palcolor->t_scale);
+ copy_v2_v2(gpcolor->t_offset, palcolor->t_offset);
+ gpcolor->t_opacity = palcolor->t_opacity;
+ gpcolor->t_pixsize = palcolor->t_pixsize;
+ gpcolor->sima = palcolor->sima;
+ gpcolor->ima = palcolor->ima;
+ gpcolor->mode = palcolor->mode;
+
+ /* 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 ((palette == gps->palette) && (STREQ(gps->colorname, palcolor->info))) {
+ gps->matindex = ob->totcol;
+ }
+ }
+ }
+ }
+ }
+
+ }
+ }
+ }
+
+
}
static void do_version_layer_collections_idproperties(ListBase *lb)
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index 9706039a7e8..838829f5209 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -2670,6 +2670,8 @@ static void write_gpencil(WriteData *wd, bGPdata *gpd)
write_animdata(wd, gpd->adt);
}
+ writedata(wd, DATA, sizeof(void *) * gpd->totcol, gpd->mat);
+
/* write grease-pencil layers to file */
writelist(wd, DATA, bGPDlayer, &gpd->layers);
for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) {
diff --git a/source/blender/makesdna/DNA_gpencil_types.h b/source/blender/makesdna/DNA_gpencil_types.h
index c57ae2ec7e7..ecc1791e3b5 100644
--- a/source/blender/makesdna/DNA_gpencil_types.h
+++ b/source/blender/makesdna/DNA_gpencil_types.h
@@ -389,6 +389,10 @@ typedef struct bGPdata {
int active_palette_slot; /* index of active palette slot */
ListBase palette_slots; /* list of bGPDpaletteref's - (2.8+) */
+
+ struct Material **mat; /* materials array */
+ short totcol; /* total materials */
+ char pad[6];
} bGPdata;
diff --git a/source/blender/makesrna/intern/rna_gpencil.c b/source/blender/makesrna/intern/rna_gpencil.c
index 4d3ac516e37..f50786fa996 100644
--- a/source/blender/makesrna/intern/rna_gpencil.c
+++ b/source/blender/makesrna/intern/rna_gpencil.c
@@ -1430,7 +1430,14 @@ static void rna_def_gpencil_data(BlenderRNA *brna)
/* Animation Data */
rna_def_animdata_common(srna);
-
+ /* materials */
+ prop = RNA_def_property(srna, "materials", PROP_COLLECTION, PROP_NONE);
+ RNA_def_property_collection_sdna(prop, NULL, "mat", "totcol");
+ RNA_def_property_struct_type(prop, "Material");
+ RNA_def_property_ui_text(prop, "Materials", "");
+ RNA_def_property_srna(prop, "IDMaterials"); /* see rna_ID.c */
+ RNA_def_property_collection_funcs(prop, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "rna_IDMaterials_assign_int");
+
/* Palette Slots */
prop = RNA_def_property(srna, "palette_slots", PROP_COLLECTION, PROP_NONE);
RNA_def_property_collection_sdna(prop, NULL, "palette_slots", NULL);
More information about the Bf-blender-cvs
mailing list