[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