[Bf-blender-cvs] [d7dfb1800fb] greasepencil-object: GPencil: Avoid double creation of Layers and Materials when converting to Mesh

Antonio Vazquez noreply at git.blender.org
Wed Apr 1 15:43:51 CEST 2020


Commit: d7dfb1800fb780faf8e8f1a0cb0b8f78807f267d
Author: Antonio Vazquez
Date:   Tue Mar 31 22:14:48 2020 +0200
Branches: greasepencil-object
https://developer.blender.org/rBd7dfb1800fb780faf8e8f1a0cb0b8f78807f267d

GPencil: Avoid double creation of Layers and Materials when converting to Mesh

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

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 d80ba556eb0..2598b8895aa 100644
--- a/source/blender/blenkernel/intern/gpencil_geom.c
+++ b/source/blender/blenkernel/intern/gpencil_geom.c
@@ -2236,6 +2236,9 @@ void BKE_gpencil_convert_mesh(Main *bmain,
   int mpoly_len = me->totpoly;
   int i;
 
+  /* If the object has materials means it was created in a previous step. */
+  const bool create_mat = (ob_gp->totcol > 0) ? false : true;
+
   /* Need at least an edge. */
   if (me->totvert < 2) {
     return;
@@ -2244,28 +2247,34 @@ void BKE_gpencil_convert_mesh(Main *bmain,
   int 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 (create_mat) {
+    gpencil_add_material(bmain, ob_gp, "Stroke", default_colors[0], true, false, &r_idx);
+  }
   /* Export faces as filled strokes. */
   if (use_faces) {
-    /* 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);
+    if (create_mat) {
+      /* 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) {
-      bGPDlayer *gpl_fill = BKE_gpencil_layer_addnew(gpd, DATA_("Fills"), true);
+      bGPDlayer *gpl_fill = BKE_gpencil_layer_named_get(gpd, DATA_("Fills"));
+      if (gpl_fill == NULL) {
+        gpl_fill = BKE_gpencil_layer_addnew(gpd, DATA_("Fills"), true);
+      }
       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];
@@ -2291,7 +2300,10 @@ void BKE_gpencil_convert_mesh(Main *bmain,
   }
 
   /* Create stroke from edges. */
-  bGPDlayer *gpl_stroke = BKE_gpencil_layer_addnew(gpd, DATA_("Lines"), true);
+  bGPDlayer *gpl_stroke = BKE_gpencil_layer_named_get(gpd, DATA_("Lines"));
+  if (gpl_stroke == NULL) {
+    gpl_stroke = BKE_gpencil_layer_addnew(gpd, DATA_("Lines"), true);
+  }
   bGPDframe *gpf_stroke = BKE_gpencil_layer_frame_get(gpl_stroke, CFRA, GP_GETFRAME_ADD_COPY);
   gpencil_generate_edgeloops(ob_eval, gpf_stroke, angle, thickness, offset, use_seams);



More information about the Bf-blender-cvs mailing list