[Bf-blender-cvs] [29c37219bf3] greasepencil-refactor: GPencil: Add new parameter to BKE_gpencil_stroke_duplicate to copy points

Antonio Vazquez noreply at git.blender.org
Tue Jan 21 10:51:33 CET 2020


Commit: 29c37219bf38e72abd09eafc91b5d5e5e948ccb0
Author: Antonio Vazquez
Date:   Tue Jan 21 09:08:26 2020 +0100
Branches: greasepencil-refactor
https://developer.blender.org/rB29c37219bf38e72abd09eafc91b5d5e5e948ccb0

GPencil: Add new parameter to BKE_gpencil_stroke_duplicate to copy points

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

M	source/blender/blenkernel/BKE_gpencil.h
M	source/blender/blenkernel/intern/gpencil.c
M	source/blender/editors/gpencil/gpencil_data.c
M	source/blender/editors/gpencil/gpencil_edit.c
M	source/blender/editors/gpencil/gpencil_interpolate.c
M	source/blender/gpencil_modifiers/intern/MOD_gpencilmirror.c
M	source/blender/gpencil_modifiers/intern/MOD_gpencilmultiply.c

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

diff --git a/source/blender/blenkernel/BKE_gpencil.h b/source/blender/blenkernel/BKE_gpencil.h
index 3397a68c5c6..b9f72c6137e 100644
--- a/source/blender/blenkernel/BKE_gpencil.h
+++ b/source/blender/blenkernel/BKE_gpencil.h
@@ -105,7 +105,7 @@ struct bGPdata *BKE_gpencil_data_addnew(struct Main *bmain, const char name[]);
 struct bGPDframe *BKE_gpencil_frame_duplicate(const struct bGPDframe *gpf_src);
 struct bGPDlayer *BKE_gpencil_layer_duplicate(const struct bGPDlayer *gpl_src);
 void BKE_gpencil_frame_copy_strokes(struct bGPDframe *gpf_src, struct bGPDframe *gpf_dst);
-struct bGPDstroke *BKE_gpencil_stroke_duplicate(struct bGPDstroke *gps_src);
+struct bGPDstroke *BKE_gpencil_stroke_duplicate(struct bGPDstroke *gps_src, const bool dup_points);
 
 void BKE_gpencil_copy_data(struct bGPdata *gpd_dst, const struct bGPdata *gpd_src, const int flag);
 struct bGPdata *BKE_gpencil_copy(struct Main *bmain, const struct bGPdata *gpd);
diff --git a/source/blender/blenkernel/intern/gpencil.c b/source/blender/blenkernel/intern/gpencil.c
index 0fc08cd43b5..afef151c354 100644
--- a/source/blender/blenkernel/intern/gpencil.c
+++ b/source/blender/blenkernel/intern/gpencil.c
@@ -551,25 +551,26 @@ void BKE_gpencil_stroke_weights_duplicate(bGPDstroke *gps_src, bGPDstroke *gps_d
 }
 
 /* make a copy of a given gpencil stroke */
-bGPDstroke *BKE_gpencil_stroke_duplicate(bGPDstroke *gps_src)
+bGPDstroke *BKE_gpencil_stroke_duplicate(bGPDstroke *gps_src, const bool dup_points)
 {
   bGPDstroke *gps_dst = NULL;
 
   gps_dst = MEM_dupallocN(gps_src);
   gps_dst->prev = gps_dst->next = NULL;
+  gps_dst->triangles = MEM_dupallocN(gps_dst->triangles);
 
-  gps_dst->points = MEM_dupallocN(gps_src->points);
+  if (dup_points) {
+    gps_dst->points = MEM_dupallocN(gps_src->points);
 
-  if (gps_src->dvert != NULL) {
-    gps_dst->dvert = MEM_dupallocN(gps_src->dvert);
-    BKE_gpencil_stroke_weights_duplicate(gps_src, gps_dst);
-  }
-  else {
-    gps_dst->dvert = NULL;
+    if (gps_src->dvert != NULL) {
+      gps_dst->dvert = MEM_dupallocN(gps_src->dvert);
+      BKE_gpencil_stroke_weights_duplicate(gps_src, gps_dst);
+    }
+    else {
+      gps_dst->dvert = NULL;
+    }
   }
 
-  gps_dst->triangles = MEM_dupallocN(gps_dst->triangles);
-
   /* return new stroke */
   return gps_dst;
 }
@@ -593,7 +594,7 @@ bGPDframe *BKE_gpencil_frame_duplicate(const bGPDframe *gpf_src)
   BLI_listbase_clear(&gpf_dst->strokes);
   for (bGPDstroke *gps_src = gpf_src->strokes.first; gps_src; gps_src = gps_src->next) {
     /* make copy of source stroke */
-    gps_dst = BKE_gpencil_stroke_duplicate(gps_src);
+    gps_dst = BKE_gpencil_stroke_duplicate(gps_src, true);
     BLI_addtail(&gpf_dst->strokes, gps_dst);
   }
 
@@ -614,7 +615,7 @@ void BKE_gpencil_frame_copy_strokes(bGPDframe *gpf_src, struct bGPDframe *gpf_ds
   BLI_listbase_clear(&gpf_dst->strokes);
   for (bGPDstroke *gps_src = gpf_src->strokes.first; gps_src; gps_src = gps_src->next) {
     /* make copy of source stroke */
-    gps_dst = BKE_gpencil_stroke_duplicate(gps_src);
+    gps_dst = BKE_gpencil_stroke_duplicate(gps_src, true);
     BLI_addtail(&gpf_dst->strokes, gps_dst);
   }
 }
diff --git a/source/blender/editors/gpencil/gpencil_data.c b/source/blender/editors/gpencil/gpencil_data.c
index 38381f16dd3..25214835486 100644
--- a/source/blender/editors/gpencil/gpencil_data.c
+++ b/source/blender/editors/gpencil/gpencil_data.c
@@ -568,7 +568,7 @@ static int gp_layer_duplicate_object_exec(bContext *C, wmOperator *op)
     for (bGPDstroke *gps_src = gpf_src->strokes.first; gps_src; gps_src = gps_src->next) {
 
       /* Make copy of source stroke. */
-      bGPDstroke *gps_dst = BKE_gpencil_stroke_duplicate(gps_src);
+      bGPDstroke *gps_dst = BKE_gpencil_stroke_duplicate(gps_src, true);
 
       /* Check if material is in destination object,
        * otherwise add the slot with the material. */
diff --git a/source/blender/editors/gpencil/gpencil_edit.c b/source/blender/editors/gpencil/gpencil_edit.c
index d287bd54613..303e2c9e615 100644
--- a/source/blender/editors/gpencil/gpencil_edit.c
+++ b/source/blender/editors/gpencil/gpencil_edit.c
@@ -4273,7 +4273,7 @@ static int gp_stroke_separate_exec(bContext *C, wmOperator *op)
               /* selected points mode */
               if (mode == GP_SEPARATE_POINT) {
                 /* make copy of source stroke */
-                bGPDstroke *gps_dst = BKE_gpencil_stroke_duplicate(gps);
+                bGPDstroke *gps_dst = BKE_gpencil_stroke_duplicate(gps, true);
 
                 /* Reassign material. */
                 gps_dst->mat_nr = idx;
@@ -4422,7 +4422,7 @@ static int gp_stroke_split_exec(bContext *C, wmOperator *UNUSED(op))
           /*  split selected strokes */
           if (gps->flag & GP_STROKE_SELECT) {
             /* make copy of source stroke */
-            bGPDstroke *gps_dst = BKE_gpencil_stroke_duplicate(gps);
+            bGPDstroke *gps_dst = BKE_gpencil_stroke_duplicate(gps, true);
 
             /* link to same frame */
             BLI_addtail(&gpf->strokes, gps_dst);
diff --git a/source/blender/editors/gpencil/gpencil_interpolate.c b/source/blender/editors/gpencil/gpencil_interpolate.c
index ee6f52ccb1c..8a70ff30d3e 100644
--- a/source/blender/editors/gpencil/gpencil_interpolate.c
+++ b/source/blender/editors/gpencil/gpencil_interpolate.c
@@ -286,7 +286,7 @@ static void gp_interpolate_set_points(bContext *C, tGPDinterpolate *tgpi)
       }
 
       /* create new stroke */
-      new_stroke = BKE_gpencil_stroke_duplicate(gps_from);
+      new_stroke = BKE_gpencil_stroke_duplicate(gps_from, true);
 
       if (valid) {
         /* if destination stroke is smaller, resize new_stroke to size of gps_to stroke */
@@ -1037,7 +1037,7 @@ static int gpencil_interpolate_seq_exec(bContext *C, wmOperator *op)
         }
 
         /* create new stroke */
-        new_stroke = BKE_gpencil_stroke_duplicate(gps_from);
+        new_stroke = BKE_gpencil_stroke_duplicate(gps_from, true);
 
         /* if destination stroke is smaller, resize new_stroke to size of gps_to stroke */
         if (gps_from->totpoints > gps_to->totpoints) {
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilmirror.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilmirror.c
index ef06e14b3d7..727423cb8bb 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilmirror.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilmirror.c
@@ -145,7 +145,7 @@ static void generateStrokes(GpencilModifierData *md,
                                            mmd->flag & GP_MIRROR_INVERT_PASS,
                                            mmd->flag & GP_MIRROR_INVERT_LAYERPASS,
                                            mmd->flag & GP_MIRROR_INVERT_MATERIAL)) {
-          gps_new = BKE_gpencil_stroke_duplicate(gps);
+          gps_new = BKE_gpencil_stroke_duplicate(gps, true);
           update_position(ob, mmd, gps_new, xi);
           BLI_addtail(&gpf->strokes, gps_new);
         }
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilmultiply.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilmultiply.c
index 7ec2ce635ba..e04f97a5731 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilmultiply.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilmultiply.c
@@ -177,7 +177,7 @@ static void duplicateStroke(bGPDstroke *gps,
   /* This ensures the original stroke is the last one to be processed. */
   for (i = count - 1; i >= 0; i--) {
     if (i != 0) {
-      new_gps = BKE_gpencil_stroke_duplicate(gps);
+      new_gps = BKE_gpencil_stroke_duplicate(gps, true);
 
       BLI_addtail(results, new_gps);
     }



More information about the Bf-blender-cvs mailing list