[Bf-blender-cvs] [d0f688a33d8] greasepencil-object: GPencil: Fix error when use perimter function

Antonio Vazquez noreply at git.blender.org
Mon Jul 27 23:11:14 CEST 2020


Commit: d0f688a33d8c778d271e361e9cf8e900d2b0ca94
Author: Antonio Vazquez
Date:   Mon Jul 27 23:10:29 2020 +0200
Branches: greasepencil-object
https://developer.blender.org/rBd0f688a33d8c778d271e361e9cf8e900d2b0ca94

GPencil: Fix error when use perimter function

The BKE function was changing the original stroke. Now a temp copy is done.

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

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 5afe05ed168..99b9134d5e0 100644
--- a/source/blender/blenkernel/intern/gpencil_geom.c
+++ b/source/blender/blenkernel/intern/gpencil_geom.c
@@ -3067,18 +3067,19 @@ bGPDstroke *BKE_gpencil_stroke_perimeter_from_view(struct RegionView3D *rv3d,
   if (gps->totpoints == 0) {
     return NULL;
   }
+  bGPDstroke *gps_temp = BKE_gpencil_stroke_duplicate(gps, true);
 
-  BKE_gpencil_stroke_to_view_space(rv3d, gps, diff_mat);
+  BKE_gpencil_stroke_to_view_space(rv3d, gps_temp, diff_mat);
   int num_perimeter_points = 0;
   ListBase *perimeter_points = gpencil_stroke_perimeter_ex(
-      gpd, gpl, gps, subdivisions, &num_perimeter_points);
+      gpd, gpl, gps_temp, subdivisions, &num_perimeter_points);
 
   if (num_perimeter_points == 0) {
     return NULL;
   }
 
   /* create new stroke */
-  bGPDstroke *perimeter_stroke = BKE_gpencil_stroke_new(gps->mat_nr, num_perimeter_points, 1);
+  bGPDstroke *perimeter_stroke = BKE_gpencil_stroke_new(gps_temp->mat_nr, num_perimeter_points, 1);
 
   tPerimeterPoint *curr = perimeter_points->first;
   for (int i = 0; i < num_perimeter_points; i++) {
@@ -3107,6 +3108,8 @@ bGPDstroke *BKE_gpencil_stroke_perimeter_from_view(struct RegionView3D *rv3d,
 
   perimeter_stroke->flag |= GP_STROKE_SELECT | GP_STROKE_CYCLIC;
 
+  BKE_gpencil_free_stroke(gps_temp);
+
   return perimeter_stroke;
 }
 /** \} */



More information about the Bf-blender-cvs mailing list