[Bf-blender-cvs] [57f83110da3] greasepencil-object: Create Grease Pencil Materials Settings for GP Objects only

Antonio Vazquez noreply at git.blender.org
Thu Apr 26 16:52:39 CEST 2018


Commit: 57f83110da36b480fddb836163925857b82d7acd
Author: Antonio Vazquez
Date:   Thu Apr 26 16:52:29 2018 +0200
Branches: greasepencil-object
https://developer.blender.org/rB57f83110da36b480fddb836163925857b82d7acd

Create Grease Pencil Materials Settings for GP Objects only

If the material is created for a grease pencil object, a new GpencilColorData settings is initializated

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

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_add_monkey.c
M	source/blender/editors/render/render_shading.c
M	source/blender/makesrna/intern/rna_main_api.c

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

diff --git a/source/blender/blenkernel/BKE_material.h b/source/blender/blenkernel/BKE_material.h
index 6658fa152ae..81af482940f 100644
--- a/source/blender/blenkernel/BKE_material.h
+++ b/source/blender/blenkernel/BKE_material.h
@@ -54,6 +54,7 @@ void BKE_material_init(struct Material *ma);
 void BKE_material_remap_object(struct Object *ob, const unsigned int *remap);
 void BKE_material_remap_object_calc(struct  Object *ob_dst, struct Object *ob_src, short *remap_src_to_dst);
 struct Material *BKE_material_add(struct Main *bmain, const char *name);
+struct Material *BKE_material_add_gpencil(struct Main *bmain, const char *name);
 void BKE_material_copy_data(struct Main *bmain, struct Material *ma_dst, const struct Material *ma_src, const int flag);
 struct Material *BKE_material_copy(struct Main *bmain, const struct Material *ma);
 struct Material *BKE_material_localize(struct Material *ma);
diff --git a/source/blender/blenkernel/intern/gpencil.c b/source/blender/blenkernel/intern/gpencil.c
index b011bbbbc91..df83a6d108f 100644
--- a/source/blender/blenkernel/intern/gpencil.c
+++ b/source/blender/blenkernel/intern/gpencil.c
@@ -1052,13 +1052,11 @@ Material *BKE_gpencil_color_ensure(Main *bmain, Object *ob)
 	if (ELEM(NULL, bmain, ob))
 		return NULL;
 
-	if (ob->totcol == 0) {
+	mat = give_current_material(ob, ob->actcol);
+	if ((mat == NULL) || (mat->gpcolor == NULL) || (ob->totcol == 0)) {
 		BKE_object_material_slot_add(ob);
-		Material *ma = BKE_material_add(bmain, "Color");
-		assign_material(ob, ma, ob->totcol, BKE_MAT_ASSIGN_EXISTING);
-	}
-	else {
-		mat = give_current_material(ob, ob->actcol);
+		mat = BKE_material_add_gpencil(bmain, DATA_("Material"));
+		assign_material(ob, mat, ob->totcol, BKE_MAT_ASSIGN_EXISTING);
 	}
 
 	return mat;
diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c
index 5df1867b7a9..c582667e8ec 100644
--- a/source/blender/blenkernel/intern/material.c
+++ b/source/blender/blenkernel/intern/material.c
@@ -157,6 +157,15 @@ Material *BKE_material_add(Main *bmain, const char *name)
 	
 	BKE_material_init(ma);
 	
+	return ma;
+}
+
+Material *BKE_material_add_gpencil(Main *bmain, const char *name)
+{
+	Material *ma;
+
+	ma = BKE_material_add(bmain, name);
+
 	/* grease pencil settings */
 	grease_pencil_init(ma);
 
diff --git a/source/blender/editors/gpencil/gpencil_add_monkey.c b/source/blender/editors/gpencil/gpencil_add_monkey.c
index 60746070ea8..64d1f9b1bc6 100644
--- a/source/blender/editors/gpencil/gpencil_add_monkey.c
+++ b/source/blender/editors/gpencil/gpencil_add_monkey.c
@@ -64,7 +64,7 @@ static int gpencil_monkey_color(Main *bmain, Object *ob, const ColorTemplate *pc
 
 	/* create a new one */
 	BKE_object_material_slot_add(ob);
-	ma = BKE_material_add(bmain, pct->name);
+	ma = BKE_material_add_gpencil(bmain, pct->name);
 	assign_material(ob, ma, ob->totcol, BKE_MAT_ASSIGN_EXISTING);
 
 	copy_v4_v4(ma->gpcolor->rgb, pct->line);
diff --git a/source/blender/editors/render/render_shading.c b/source/blender/editors/render/render_shading.c
index c5787a1d46c..645cd3bc8ec 100644
--- a/source/blender/editors/render/render_shading.c
+++ b/source/blender/editors/render/render_shading.c
@@ -462,6 +462,7 @@ static int new_material_exec(bContext *C, wmOperator *UNUSED(op))
 {
 	Material *ma = CTX_data_pointer_get_type(C, "material", &RNA_Material).data;
 	Main *bmain = CTX_data_main(C);
+	Object *ob = CTX_data_active_object(C);
 	PointerRNA ptr, idptr;
 	PropertyRNA *prop;
 
@@ -470,7 +471,12 @@ static int new_material_exec(bContext *C, wmOperator *UNUSED(op))
 		ma = BKE_material_copy(bmain, ma);
 	}
 	else {
-		ma = BKE_material_add(bmain, DATA_("Material"));
+		if ((!ob) || (ob->type != OB_GPENCIL)) {
+			ma = BKE_material_add(bmain, DATA_("Material"));
+		}
+		else {
+			ma = BKE_material_add_gpencil(bmain, DATA_("Material"));
+		}
 		ED_node_shader_default(C, &ma->id);
 		ma->use_nodes = true;
 	}
diff --git a/source/blender/makesrna/intern/rna_main_api.c b/source/blender/makesrna/intern/rna_main_api.c
index b4b66f22b40..38912ec2ab9 100644
--- a/source/blender/makesrna/intern/rna_main_api.c
+++ b/source/blender/makesrna/intern/rna_main_api.c
@@ -269,6 +269,16 @@ static Material *rna_Main_materials_new(Main *bmain, const char *name)
 	return (Material *)id;
 }
 
+static Material *rna_Main_materials_new_greasepencil(Main *bmain, const char *name)
+{
+	char safe_name[MAX_ID_NAME - 2];
+	rna_idname_validate(name, safe_name);
+
+	ID *id = (ID *)BKE_material_add_gpencil(bmain, safe_name);
+	id_us_min(id);
+	return (Material *)id;
+}
+
 static const EnumPropertyItem *rna_Main_nodetree_type_itemf(bContext *UNUSED(C), PointerRNA *UNUSED(ptr), PropertyRNA *UNUSED(prop), bool *r_free)
 {
 	return rna_node_tree_type_itemf(NULL, NULL, r_free);
@@ -805,6 +815,14 @@ void RNA_def_main_materials(BlenderRNA *brna, PropertyRNA *cprop)
 	parm = RNA_def_pointer(func, "material", "Material", "", "New material data-block");
 	RNA_def_function_return(func, parm);
 
+	func = RNA_def_function(srna, "new_greasepencil", "rna_Main_materials_new_greasepencil");
+	RNA_def_function_ui_description(func, "Add a new grease pencil material to the main database");
+	parm = RNA_def_string(func, "name", "Material", 0, "", "New name for the data-block");
+	RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
+	/* return type */
+	parm = RNA_def_pointer(func, "material", "Material", "", "New material data-block");
+	RNA_def_function_return(func, parm);
+
 	func = RNA_def_function(srna, "remove", "rna_Main_ID_remove");
 	RNA_def_function_flag(func, FUNC_USE_REPORTS);
 	RNA_def_function_ui_description(func, "Remove a material from the current blendfile");



More information about the Bf-blender-cvs mailing list