[Bf-blender-cvs] [5c9312afeef] greasepencil-object: Improve default Material use

Antonio Vazquez noreply at git.blender.org
Thu Apr 26 17:42:13 CEST 2018


Commit: 5c9312afeef9e9a1f4d6395ccb7b15f69b2446dc
Author: Antonio Vazquez
Date:   Thu Apr 26 17:42:07 2018 +0200
Branches: greasepencil-object
https://developer.blender.org/rB5c9312afeef9e9a1f4d6395ccb7b15f69b2446dc

Improve default Material use

If the default material has not the Grease pencil settings, add it instead to create a new material.

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

M	source/blender/blenkernel/BKE_material.h
M	source/blender/blenkernel/intern/gpencil.c
M	source/blender/blenkernel/intern/material.c
M	source/blender/editors/gpencil/gpencil_utils.c

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

diff --git a/source/blender/blenkernel/BKE_material.h b/source/blender/blenkernel/BKE_material.h
index 81af482940f..7158428d647 100644
--- a/source/blender/blenkernel/BKE_material.h
+++ b/source/blender/blenkernel/BKE_material.h
@@ -60,6 +60,7 @@ struct Material *BKE_material_copy(struct Main *bmain, const struct Material *ma
 struct Material *BKE_material_localize(struct Material *ma);
 struct Material *give_node_material(struct Material *ma); /* returns node material or self */
 void BKE_material_make_local(struct Main *bmain, struct Material *ma, const bool lib_local);
+void BKE_material_init_gpencil_settings(struct Material *ma);
 
 /* UNUSED */
 // void automatname(struct Material *);
diff --git a/source/blender/blenkernel/intern/gpencil.c b/source/blender/blenkernel/intern/gpencil.c
index df83a6d108f..256428ba378 100644
--- a/source/blender/blenkernel/intern/gpencil.c
+++ b/source/blender/blenkernel/intern/gpencil.c
@@ -1053,11 +1053,14 @@ Material *BKE_gpencil_color_ensure(Main *bmain, Object *ob)
 		return NULL;
 
 	mat = give_current_material(ob, ob->actcol);
-	if ((mat == NULL) || (mat->gpcolor == NULL) || (ob->totcol == 0)) {
+	if ((mat == NULL) || (mat->gpcolor == NULL)) {
 		BKE_object_material_slot_add(ob);
 		mat = BKE_material_add_gpencil(bmain, DATA_("Material"));
 		assign_material(ob, mat, ob->totcol, BKE_MAT_ASSIGN_EXISTING);
 	}
+	else if ((mat != NULL) && (mat->gpcolor == NULL)) {
+			BKE_material_init_gpencil_settings(mat);
+	}
 
 	return mat;
 }
diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c
index c582667e8ec..a5be1f3b602 100644
--- a/source/blender/blenkernel/intern/material.c
+++ b/source/blender/blenkernel/intern/material.c
@@ -111,7 +111,7 @@ void BKE_material_free(Material *ma)
 	BKE_previewimg_free(&ma->preview);
 }
 
-static void grease_pencil_init(Material *ma)
+void BKE_material_init_gpencil_settings(Material *ma)
 {
 	if ((ma) && (ma->gpcolor == NULL)) {
 		ma->gpcolor = MEM_callocN(sizeof(GpencilColorData), "Grease Pencil Material Settings");
@@ -167,11 +167,12 @@ Material *BKE_material_add_gpencil(Main *bmain, const char *name)
 	ma = BKE_material_add(bmain, name);
 
 	/* grease pencil settings */
-	grease_pencil_init(ma);
+	BKE_material_init_gpencil_settings(ma);
 
 	return ma;
 }
 
+
 /**
  * Only copy internal data of Material ID from source to already allocated/initialized destination.
  * You probably nerver want to use that directly, use id_copy or BKE_id_copy_ex for typical needs.
diff --git a/source/blender/editors/gpencil/gpencil_utils.c b/source/blender/editors/gpencil/gpencil_utils.c
index 39ddcaa95b8..bf05e876f25 100644
--- a/source/blender/editors/gpencil/gpencil_utils.c
+++ b/source/blender/editors/gpencil/gpencil_utils.c
@@ -1130,9 +1130,17 @@ void ED_gpencil_add_defaults(bContext *C)
 	Object *ob = CTX_data_active_object(C);
 	ToolSettings *ts = CTX_data_tool_settings(C);
 	bGPdata *gpd = CTX_data_gpencil_data(C);
-	
+
+	/* first try to reuse default material */
+	if (ob->actcol > 0) {
+		Material *mat = give_current_material(ob, ob->actcol);
+		if ((mat) && (mat->gpcolor == NULL)) {
+			BKE_material_init_gpencil_settings(mat);
+		}
+	}
+
 	/* ensure color exist */
-	//BKE_gpencil_color_ensure(bmain, ob);
+	BKE_gpencil_color_ensure(bmain, ob);
 
 	Paint *paint = BKE_brush_get_gpencil_paint(ts);
 	/* if not exist, create a new one */



More information about the Bf-blender-cvs mailing list