[Bf-blender-cvs] [a90b578d7d3] asset-greasepencil: GPencil: Add option to merge layers in Asset creation

Antonio Vazquez noreply at git.blender.org
Wed Jul 21 20:19:34 CEST 2021


Commit: a90b578d7d347a5fee6110548a7a8ddf14826c29
Author: Antonio Vazquez
Date:   Wed Jul 21 20:19:26 2021 +0200
Branches: asset-greasepencil
https://developer.blender.org/rBa90b578d7d347a5fee6110548a7a8ddf14826c29

GPencil: Add option to merge layers in Asset creation

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

M	source/blender/editors/gpencil/gpencil_asset.c
M	source/blender/editors/gpencil/gpencil_utils.c

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

diff --git a/source/blender/editors/gpencil/gpencil_asset.c b/source/blender/editors/gpencil/gpencil_asset.c
index 9d4a45f5ea1..c13e0344c34 100644
--- a/source/blender/editors/gpencil/gpencil_asset.c
+++ b/source/blender/editors/gpencil/gpencil_asset.c
@@ -219,6 +219,7 @@ static int gpencil_asset_create_exec(bContext *C, wmOperator *op)
 
   const eGP_AssetModes mode = RNA_enum_get(op->ptr, "mode");
   const int reset_origin = RNA_boolean_get(op->ptr, "reset_origin");
+  const int merge_layers = RNA_boolean_get(op->ptr, "merge_layers");
 
   /* Create a copy of selected datablock. */
   bGPdata *gpd = (bGPdata *)BKE_id_copy(bmain, &gpd_src->id);
@@ -240,6 +241,15 @@ static int gpencil_asset_create_exec(bContext *C, wmOperator *op)
     gpl->parsubstr[0] = 0;
     gpl->partype = 0;
 
+    /* Remove masking. */
+    bGPDlayer_Mask *mask_next;
+    for (bGPDlayer_Mask *mask = gpl->mask_layers.first; mask; mask = mask_next) {
+      mask_next = mask->next;
+      BKE_gpencil_layer_mask_remove(gpl, mask);
+    }
+    gpl->mask_layers.first = NULL;
+    gpl->mask_layers.last = NULL;
+
     bGPDframe *gpf_active = gpl->actframe;
 
     LISTBASE_FOREACH_MUTABLE (bGPDframe *, gpf, &gpl->frames) {
@@ -281,6 +291,18 @@ static int gpencil_asset_create_exec(bContext *C, wmOperator *op)
     }
   }
 
+  /* Merge layers. */
+  if ((merge_layers) && (gpd->layers.first)) {
+    bGPDlayer *gpl_dst = gpd->layers.first;
+    LISTBASE_FOREACH_MUTABLE (bGPDlayer *, gpl_src, &gpd->layers) {
+      if (gpl_dst == gpl_src) {
+        continue;
+      }
+      ED_gpencil_layer_merge(gpd, gpl_src, gpl_dst);
+    }
+    strcpy(gpl_dst->info, "Asset_Layer");
+  }
+
   if (ED_asset_mark_id(C, &gpd->id)) {
   }
 
@@ -321,6 +343,7 @@ void GPENCIL_OT_asset_create(wmOperatorType *ot)
                   1,
                   "Reset Origin to Geometry",
                   "Set origin of the asset in the center of the strokes bounding box");
+  RNA_def_boolean(ot->srna, "merge_layers", 0, "Merge Layers", "Merge all layers in only one");
 }
 
 /** \} */
diff --git a/source/blender/editors/gpencil/gpencil_utils.c b/source/blender/editors/gpencil/gpencil_utils.c
index 0c4a7bc4d14..c3ddd68f0bd 100644
--- a/source/blender/editors/gpencil/gpencil_utils.c
+++ b/source/blender/editors/gpencil/gpencil_utils.c
@@ -3441,5 +3441,7 @@ void ED_gpencil_layer_merge(bGPdata *gpd, bGPDlayer *gpl_src, bGPDlayer *gpl_dst
   BLI_ghash_free(gh_frames_dst, NULL, NULL);
 
   /* Reorder masking. */
-  BKE_gpencil_layer_mask_sort(gpd, gpl_dst);
+  if (gpl_dst->mask_layers.first) {
+    BKE_gpencil_layer_mask_sort(gpd, gpl_dst);
+  }
 }



More information about the Bf-blender-cvs mailing list