[Bf-blender-cvs] [ba73350932a] greasepencil-object: GPencil: Use materials for mesh converted instead of Vertex Color
Antonio Vazquez
noreply at git.blender.org
Tue Mar 31 13:11:52 CEST 2020
Commit: ba73350932a232c46831df28e12c8f06122d699e
Author: Antonio Vazquez
Date: Tue Mar 31 13:09:05 2020 +0200
Branches: greasepencil-object
https://developer.blender.org/rBba73350932a232c46831df28e12c8f06122d699e
GPencil: Use materials for mesh converted instead of Vertex Color
===================================================================
M source/blender/blenkernel/intern/gpencil_geom.c
===================================================================
diff --git a/source/blender/blenkernel/intern/gpencil_geom.c b/source/blender/blenkernel/intern/gpencil_geom.c
index f0452403e28..968189bc68c 100644
--- a/source/blender/blenkernel/intern/gpencil_geom.c
+++ b/source/blender/blenkernel/intern/gpencil_geom.c
@@ -1618,12 +1618,13 @@ static int gpencil_check_same_material_color(Object *ob_gp, float color[4], Mate
/* Helper: Add gpencil material using material as base. */
static Material *gpencil_add_material(Main *bmain,
Object *ob_gp,
+ char *name,
const float color[4],
const bool use_stroke,
const bool use_fill,
int *r_idx)
{
- Material *mat_gp = BKE_gpencil_object_material_new(bmain, ob_gp, "Material", r_idx);
+ Material *mat_gp = BKE_gpencil_object_material_new(bmain, ob_gp, name, r_idx);
MaterialGPencilStyle *gp_style = mat_gp->gp_style;
/* Stroke color. */
@@ -1770,7 +1771,7 @@ static void gpencil_convert_spline(Main *bmain,
int r_idx = gpencil_check_same_material_color(ob_gp, color, &mat_gp);
if ((ob_cu->totcol > 0) && (r_idx < 0)) {
Material *mat_curve = BKE_object_material_get(ob_cu, 1);
- mat_gp = gpencil_add_material(bmain, ob_gp, color, gpencil_lines, fill, &r_idx);
+ mat_gp = gpencil_add_material(bmain, ob_gp, "Material", color, gpencil_lines, fill, &r_idx);
if ((mat_curve) && (mat_curve->gp_style != NULL)) {
MaterialGPencilStyle *gp_style_cur = mat_curve->gp_style;
@@ -2065,7 +2066,6 @@ static int gpencil_walk_edge(GHash *v_table,
static void gpencil_generate_edgeloops(Object *ob, bGPDframe *gpf_stroke)
{
- const float vert_color[4] = {0.0f, 0.0f, 0.0f, 1.0f};
Mesh *me = (Mesh *)ob->data;
if (me->totedge == 0) {
return;
@@ -2138,7 +2138,6 @@ static void gpencil_generate_edgeloops(Object *ob, bGPDframe *gpf_stroke)
/* Create Stroke. */
bGPDstroke *gps_stroke = BKE_gpencil_stroke_add(gpf_stroke, 0, array_len + 1, 5, false);
- copy_v4_v4(gps_stroke->vert_color_fill, vert_color);
/* Create first segment. */
uint v = stroke[0];
@@ -2147,13 +2146,11 @@ static void gpencil_generate_edgeloops(Object *ob, bGPDframe *gpf_stroke)
copy_v3_v3(&pt->x, gped->v1_co);
pt->pressure = 1.0f;
pt->strength = 1.0f;
- copy_v4_v4(pt->vert_color, vert_color);
pt = &gps_stroke->points[1];
copy_v3_v3(&pt->x, gped->v2_co);
pt->pressure = 1.0f;
pt->strength = 1.0f;
- copy_v4_v4(pt->vert_color, vert_color);
/* Add next segments. */
for (int i = 1; i < array_len; i++) {
@@ -2164,7 +2161,6 @@ static void gpencil_generate_edgeloops(Object *ob, bGPDframe *gpf_stroke)
copy_v3_v3(&pt->x, gped->v2_co);
pt->pressure = 1.0f;
pt->strength = 1.0f;
- copy_v4_v4(pt->vert_color, vert_color);
}
BKE_gpencil_stroke_geometry_update(gps_stroke);
@@ -2217,12 +2213,25 @@ void BKE_gpencil_convert_mesh(Main *bmain,
return;
}
- /* Create two materials, one for stroke, one for fill */
int r_idx;
- const float default_colors[3][4] = {
- {0.0f, 0.0f, 0.0f, 1.0f}, {0.7f, 0.7f, 0.7f, 1.0f}, {0.5f, 0.5f, 0.5f, 1.0f}};
- gpencil_add_material(bmain, ob_gp, default_colors[0], true, false, &r_idx);
- gpencil_add_material(bmain, ob_gp, default_colors[1], false, true, &r_idx);
+ const float default_colors[2][4] = {{0.0f, 0.0f, 0.0f, 1.0f}, {0.7f, 0.7f, 0.7f, 1.0f}};
+ /* Create stroke material. */
+ gpencil_add_material(bmain, ob_gp, "Stroke", default_colors[0], true, false, &r_idx);
+
+ /* If no materials, create a simple fill. */
+ if (ob_mesh->totcol == 0) {
+ gpencil_add_material(bmain, ob_gp, "Fill", default_colors[1], false, true, &r_idx);
+ }
+ else {
+ /* Create all materials for fill. */
+ for (int i = 0; i < ob_mesh->totcol; i++) {
+ Material *ma = BKE_object_material_get(ob_mesh, i + 1);
+ float color[4];
+ copy_v3_v3(color, &ma->r);
+ color[3] = 1.0f;
+ gpencil_add_material(bmain, ob_gp, ma->id.name + 2, color, false, true, &r_idx);
+ }
+ }
/* Read all polygons and create fill for each. */
if (mpoly_len > 0) {
@@ -2230,22 +2239,10 @@ void BKE_gpencil_convert_mesh(Main *bmain,
bGPDframe *gpf_fill = BKE_gpencil_layer_frame_get(gpl_fill, CFRA, GP_GETFRAME_ADD_COPY);
for (i = 0, mp = mpoly; i < mpoly_len; i++, mp++) {
MLoop *ml = &mloop[mp->loopstart];
- /* Get color from Material Viewport color. */
- Material *mat = me->mat != NULL ? me->mat[mp->mat_nr] : NULL;
- float vert_color[4];
- if (mat != NULL) {
- copy_v3_v3(vert_color, &mat->r);
- vert_color[3] = 1.0f;
- }
- else {
- /* Use default. */
- copy_v4_v4(vert_color, default_colors[2]);
- }
-
/* Create fill stroke. */
- bGPDstroke *gps_fill = BKE_gpencil_stroke_add(gpf_fill, 1, mp->totloop, 10, false);
+ bGPDstroke *gps_fill = BKE_gpencil_stroke_add(
+ gpf_fill, mp->mat_nr + 1, mp->totloop, 10, false);
gps_fill->flag |= GP_STROKE_CYCLIC;
- copy_v4_v4(gps_fill->vert_color_fill, vert_color);
/* Add points to strokes. */
int j;
@@ -2256,7 +2253,6 @@ void BKE_gpencil_convert_mesh(Main *bmain,
copy_v3_v3(&pt->x, mv->co);
pt->pressure = 1.0f;
pt->strength = 1.0f;
- copy_v4_v4(pt->vert_color, vert_color);
}
BKE_gpencil_stroke_geometry_update(gps_fill);
More information about the Bf-blender-cvs
mailing list