Commit: f2d0df82fad4681c524b60c9ffeb6130bd93b5db
Author: Antonio Vazquez
Date:   Fri Feb 2 20:39:32 2018 +0100
Branches: greasepencil-object
https://developer.blender.org/rBf2d0df82fad4681c524b60c9ffeb6130bd93b5db

Keep selection after Split stroke

When split a section of the stroke is better to keep the selection.

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

M       source/blender/editors/gpencil/gpencil_edit.c
M       source/blender/editors/gpencil/gpencil_intern.h
M       source/blender/editors/gpencil/gpencil_paint.c

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

diff --git a/source/blender/editors/gpencil/gpencil_edit.c 
b/source/blender/editors/gpencil/gpencil_edit.c
index 9e1849bb16e..f00503791e7 100644
--- a/source/blender/editors/gpencil/gpencil_edit.c
+++ b/source/blender/editors/gpencil/gpencil_edit.c
@@ -1718,7 +1718,8 @@ typedef struct tGPDeleteIsland {
  *      becomes much less
  * 2) Each island gets converted to a new stroke
  */
-void gp_stroke_delete_tagged_points(bGPDframe *gpf, bGPDstroke *gps, 
bGPDstroke *next_stroke, int tag_flags)
+void gp_stroke_delete_tagged_points(bGPDframe *gpf, bGPDstroke *gps, 
bGPDstroke *next_stroke, 
+       int tag_flags, bool select)
 {
        tGPDeleteIsland *islands = MEM_callocN(sizeof(tGPDeleteIsland) * 
(gps->totpoints + 1) / 2, "gp_point_islands");
        bool in_island  = false;
@@ -1800,6 +1801,11 @@ void gp_stroke_delete_tagged_points(bGPDframe *gpf, 
bGPDstroke *gps, bGPDstroke
                                pts = new_stroke->points;
                                for (j = 0; j < new_stroke->totpoints; j++, 
pts++) {
                                        pts->time -= delta;
+                                       /* set flag for select again later */
+                                       if (select == true) {
+                                               pts->flag &= ~GP_SPOINT_SELECT;
+                                               pts->flag |= GP_SPOINT_TAG;
+                                       }
                                }
                        }
                        
@@ -1865,7 +1871,7 @@ static int gp_delete_selected_points(bContext *C)
                                                gps->flag &= ~GP_STROKE_SELECT;
 
                                                /* delete unwanted points by 
splitting stroke into several smaller ones */
-                                               
gp_stroke_delete_tagged_points(gpf, gps, gpsn, GP_SPOINT_SELECT);
+                                               
gp_stroke_delete_tagged_points(gpf, gps, gpsn, GP_SPOINT_SELECT, false);
 
                                                changed = true;
                                        }
@@ -3169,10 +3175,10 @@ static int gp_stroke_separate_exec(bContext *C, 
wmOperator *op)
                                                                }
 
                                                                /* delete 
selected points from destination stroke */
-                                                               
gp_stroke_delete_tagged_points(gpf_dst, gps_dst, NULL, GP_SPOINT_SELECT);
+                                                               
gp_stroke_delete_tagged_points(gpf_dst, gps_dst, NULL, GP_SPOINT_SELECT, false);
 
                                                                /* delete 
selected points from origin stroke */
-                                                               
gp_stroke_delete_tagged_points(gpf, gps, gpsn, GP_SPOINT_SELECT);
+                                                               
gp_stroke_delete_tagged_points(gpf, gps, gpsn, GP_SPOINT_SELECT, false);
                                                        }
                                                        /* selected strokes 
mode */
                                                        else if (mode == 
GP_SEPARATE_STROKE) {
@@ -3305,10 +3311,20 @@ static int gp_stroke_split_exec(bContext *C, wmOperator 
*op)
                                                }
 
                                                /* delete selected points from 
destination stroke */
-                                               
gp_stroke_delete_tagged_points(gpf, gps_dst, NULL, GP_SPOINT_SELECT);
+                                               
gp_stroke_delete_tagged_points(gpf, gps_dst, NULL, GP_SPOINT_SELECT, true);
 
                                                /* delete selected points from 
origin stroke */
-                                               
gp_stroke_delete_tagged_points(gpf, gps, gpsn, GP_SPOINT_SELECT);
+                                               
gp_stroke_delete_tagged_points(gpf, gps, gpsn, GP_SPOINT_SELECT, false);
+                                       }
+                               }
+                               /* select again tagged points */
+                               for (gps = gpf->strokes.first; gps; gps = 
gps->next) {
+                                       bGPDspoint *pt = gps->points;
+                                       for (int i = 0; i < gps->totpoints; 
i++, pt++) {
+                                               if (pt->flag & GP_SPOINT_TAG) {
+                                                       pt->flag |= 
GP_SPOINT_SELECT;
+                                                       pt->flag &= 
~GP_SPOINT_TAG;
+                                               }
                                        }
                                }
                        }
diff --git a/source/blender/editors/gpencil/gpencil_intern.h 
b/source/blender/editors/gpencil/gpencil_intern.h
index 6c7b5bc4e52..47dd7d6e411 100644
--- a/source/blender/editors/gpencil/gpencil_intern.h
+++ b/source/blender/editors/gpencil/gpencil_intern.h
@@ -298,7 +298,8 @@ struct GHash *gp_copybuf_validate_colormap(struct bContext 
*C);
 
 /* Stroke Editing ------------------------------------ */
 
-void gp_stroke_delete_tagged_points(bGPDframe *gpf, bGPDstroke *gps, 
bGPDstroke *next_stroke, int tag_flags);
+void gp_stroke_delete_tagged_points(bGPDframe *gpf, bGPDstroke *gps, 
bGPDstroke *next_stroke, 
+                                                                       int 
tag_flags, bool select);
 int gp_delete_selected_point_wrap(bContext *C);
 
 bool gp_smooth_stroke(bGPDstroke *gps, int i, float inf, bool affect_pressure);
diff --git a/source/blender/editors/gpencil/gpencil_paint.c 
b/source/blender/editors/gpencil/gpencil_paint.c
index d60e4c5e785..74cf8cf51a4 100644
--- a/source/blender/editors/gpencil/gpencil_paint.c
+++ b/source/blender/editors/gpencil/gpencil_paint.c
@@ -1253,7 +1253,7 @@ static void gp_stroke_eraser_dostroke(tGPsdata *p,
                
                /* Second Pass: Remove any points that are tagged */
                if (do_cull) {
-                       gp_stroke_delete_tagged_points(gpf, gps, gps->next, 
GP_SPOINT_TAG);
+                       gp_stroke_delete_tagged_points(gpf, gps, gps->next, 
GP_SPOINT_TAG, false);
                }
                BKE_gpencil_batch_cache_dirty(p->gpd);
        }

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to