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");

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to