[Bf-blender-cvs] [0ce5a6b7231] asset-greasepencil: Fix errors after merge

Antonio Vazquez noreply at git.blender.org
Thu Nov 4 20:15:07 CET 2021


Commit: 0ce5a6b72313fbfdb9756cbba5b6ee1ece625eea
Author: Antonio Vazquez
Date:   Thu Nov 4 20:01:04 2021 +0100
Branches: asset-greasepencil
https://developer.blender.org/rB0ce5a6b72313fbfdb9756cbba5b6ee1ece625eea

Fix errors after merge

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

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

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

diff --git a/source/blender/editors/gpencil/gpencil_asset.c b/source/blender/editors/gpencil/gpencil_asset.c
index 7074011e33a..f7bd8f3d479 100644
--- a/source/blender/editors/gpencil/gpencil_asset.c
+++ b/source/blender/editors/gpencil/gpencil_asset.c
@@ -213,6 +213,36 @@ typedef enum eGP_AssetModes {
   GP_ASSET_MODE_SELECTED_STROKES,
 } eGP_AssetModes;
 
+/* Helper: Apply layer settings. */
+static void apply_layer_settings(bGPDlayer *gpl)
+{
+  /* Apply layer attributes. */
+  LISTBASE_FOREACH (bGPDframe *, gpf, &gpl->frames) {
+    LISTBASE_FOREACH (bGPDstroke *, gps, &gpf->strokes) {
+      gps->fill_opacity_fac *= gpl->opacity;
+      gps->vert_color_fill[3] *= gpl->opacity;
+      for (int p = 0; p < gps->totpoints; p++) {
+        bGPDspoint *pt = &gps->points[p];
+        float factor = (((float)gps->thickness * pt->pressure) + (float)gpl->line_change) /
+                       ((float)gps->thickness * pt->pressure);
+        pt->pressure *= factor;
+        pt->strength *= gpl->opacity;
+
+        /* Layer transformation. */
+        mul_v3_m4v3(&pt->x, gpl->layer_mat, &pt->x);
+        zero_v3(gpl->location);
+        zero_v3(gpl->rotation);
+        copy_v3_fl(gpl->scale, 1.0f);
+      }
+    }
+  }
+
+  gpl->line_change = 0;
+  gpl->opacity = 1.0f;
+  unit_m4(gpl->layer_mat);
+  invert_m4_m4(gpl->layer_invmat, gpl->layer_mat);
+}
+
 /* Helper: Create an asset for data block.
  * return: False if there are features non supported. */
 static bool gpencil_asset_create(const bContext *C,
@@ -346,12 +376,17 @@ static bool gpencil_asset_create(const bContext *C,
 
   /* Flatten layers. */
   if ((flatten_layers) && (gpd->layers.first)) {
+    /* Apply layer attributes to all layers. */
+    LISTBASE_FOREACH (bGPDlayer *, gpl, &gpd->layers) {
+      apply_layer_settings(gpl);
+    }
+
     bGPDlayer *gpl_dst = gpd->layers.first;
-    LISTBASE_FOREACH_MUTABLE (bGPDlayer *, gpl_src, &gpd->layers) {
-      if (gpl_dst == gpl_src) {
-        continue;
+    LISTBASE_FOREACH_BACKWARD_MUTABLE (bGPDlayer *, gpl, &gpd->layers) {
+      if (gpl == gpl_dst) {
+        break;
       }
-      ED_gpencil_layer_merge(gpd, gpl_src, gpl_dst);
+      ED_gpencil_layer_merge(gpd, gpl, gpl->prev, false);
     }
     strcpy(gpl_dst->info, "Asset_Layer");
   }



More information about the Bf-blender-cvs mailing list