[Bf-blender-cvs] [fcdb07c5692] greasepencil-object: GPencil: Display Edit Points in Vertex Paint and Mask buttons

Antonio Vazquez noreply at git.blender.org
Thu Nov 7 22:58:27 CET 2019


Commit: fcdb07c5692cb2ec1b67cd309d79098b240b057b
Author: Antonio Vazquez
Date:   Thu Nov 7 22:58:17 2019 +0100
Branches: greasepencil-object
https://developer.blender.org/rBfcdb07c5692cb2ec1b67cd309d79098b240b057b

GPencil: Display Edit Points in Vertex Paint and Mask buttons

This is part of the masking functions.

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

M	source/blender/draw/engines/gpencil/gpencil_draw_utils.c
M	source/blender/draw/engines/gpencil/gpencil_engine.c
M	source/blender/editors/gpencil/gpencil_intern.h
M	source/blender/editors/gpencil/gpencil_select.c
M	source/blender/makesrna/intern/rna_scene.c

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

diff --git a/source/blender/draw/engines/gpencil/gpencil_draw_utils.c b/source/blender/draw/engines/gpencil/gpencil_draw_utils.c
index 43b6a0c2c9f..3afd1606468 100644
--- a/source/blender/draw/engines/gpencil/gpencil_draw_utils.c
+++ b/source/blender/draw/engines/gpencil/gpencil_draw_utils.c
@@ -1138,27 +1138,38 @@ static void gpencil_add_editpoints_vertexdata(GpencilBatchCache *cache,
                                     (GP_SCULPT_MASK_SELECTMODE_POINT |
                                      GP_SCULPT_MASK_SELECTMODE_SEGMENT)));
 
+  const bool use_vertex_mask = (GPENCIL_VERTEX_MODE(gpd) && (ts->gpencil_selectmode_vertex &
+                                                             (GP_VERTEX_MASK_SELECTMODE_POINT |
+                                                              GP_VERTEX_MASK_SELECTMODE_STROKE |
+                                                              GP_VERTEX_MASK_SELECTMODE_SEGMENT)));
+
+  const bool show_vertex_points = (GPENCIL_VERTEX_MODE(gpd) &&
+                                   (ts->gpencil_selectmode_vertex &
+                                    (GP_VERTEX_MASK_SELECTMODE_POINT |
+                                     GP_VERTEX_MASK_SELECTMODE_SEGMENT)));
+
   MaterialGPencilStyle *gp_style = BKE_material_gpencil_settings_get(ob, gps->mat_nr + 1);
 
   /* alpha factor for edit points/line to make them more subtle */
   float edit_alpha = v3d->vertex_opacity;
 
-  if (GPENCIL_ANY_EDIT_MODE(gpd)) {
+  if ((GPENCIL_ANY_EDIT_MODE(gpd)) || (GPENCIL_VERTEX_MODE(gpd))) {
     Object *obact = DRW_context_state_get()->obact;
     if ((!obact) || (obact->type != OB_GPENCIL)) {
       return;
     }
     const bool is_weight_paint = (gpd) && (gpd->flag & GP_DATA_STROKE_WEIGHTMODE);
 
-    /* If Sculpt mode and the mask is disabled, the select must be hidden. */
-    const bool hide_select = GPENCIL_SCULPT_MODE(gpd) && !use_sculpt_mask;
+    /* If Sculpt/Vertex mode and the mask is disabled, the select must be hidden. */
+    const bool hide_select = ((GPENCIL_SCULPT_MODE(gpd) && !use_sculpt_mask) ||
+                              (GPENCIL_VERTEX_MODE(gpd) && !use_vertex_mask));
 
     /* Show Edit points if:
      *  Edit mode: Not in Stroke selection mode
      *  Sculpt mode: Not in Stroke mask mode and any other mask mode enabled
      *  Weight mode: Always
      */
-    const bool show_points = (show_sculpt_points) || (is_weight_paint) ||
+    const bool show_points = (show_sculpt_points) || (show_vertex_points) || (is_weight_paint) ||
                              (GPENCIL_EDIT_MODE(gpd) &&
                               ((ts->gpencil_selectmode_edit != GP_SELECTMODE_STROKE) ||
                                (gps->totpoints == 1)));
@@ -1310,7 +1321,7 @@ static void gpencil_draw_strokes(GpencilBatchCache *cache,
       }
     }
 
-    /* edit points (only in edit mode and not play animation not render) */
+    /* edit points (only in edit mode or mask and not play animation not render) */
     if ((draw_ctx->obact == ob) && (!playing) && (!is_render) && (!cache_ob->is_dup_ob)) {
       if ((gpl->flag & GP_LAYER_LOCKED) == 0) {
         if (!stl->g_data->shgrps_edit_line) {
diff --git a/source/blender/draw/engines/gpencil/gpencil_engine.c b/source/blender/draw/engines/gpencil/gpencil_engine.c
index b46b092edac..e3e5be8603d 100644
--- a/source/blender/draw/engines/gpencil/gpencil_engine.c
+++ b/source/blender/draw/engines/gpencil/gpencil_engine.c
@@ -966,7 +966,7 @@ void GPENCIL_draw_scene(void *ved)
   const bool playing = stl->storage->is_playing;
   const bool is_render = stl->storage->is_render;
   bGPdata *gpd_act = (obact) && (obact->type == OB_GPENCIL) ? (bGPdata *)obact->data : NULL;
-  const bool is_edit = GPENCIL_ANY_EDIT_MODE(gpd_act);
+  const bool is_edit = (GPENCIL_ANY_EDIT_MODE(gpd_act) || GPENCIL_VERTEX_MODE(gpd_act));
   const bool overlay = v3d != NULL ? (bool)((v3d->flag2 & V3D_HIDE_OVERLAYS) == 0) : true;
 
   /* if the draw is for select, do a basic drawing and return */
diff --git a/source/blender/editors/gpencil/gpencil_intern.h b/source/blender/editors/gpencil/gpencil_intern.h
index 88071e59284..58206cc6bfb 100644
--- a/source/blender/editors/gpencil/gpencil_intern.h
+++ b/source/blender/editors/gpencil/gpencil_intern.h
@@ -648,6 +648,10 @@ struct GP_EditableStrokes_Iter {
   ((flag & (GP_SCULPT_MASK_SELECTMODE_POINT | GP_SCULPT_MASK_SELECTMODE_STROKE | \
             GP_SCULPT_MASK_SELECTMODE_SEGMENT)))
 
+#define GPENCIL_ANY_VERTEX_MASK(flag) \
+  ((flag & (GP_VERTEX_MASK_SELECTMODE_POINT | GP_VERTEX_MASK_SELECTMODE_STROKE | \
+            GP_VERTEX_MASK_SELECTMODE_SEGMENT)))
+
 /**
  * Iterate over all editable strokes using evaluated data in the current context,
  * stopping on each usable layer + stroke pair (i.e. gpl and gps)
diff --git a/source/blender/editors/gpencil/gpencil_select.c b/source/blender/editors/gpencil/gpencil_select.c
index be265ed4bd5..9723cec4f5c 100644
--- a/source/blender/editors/gpencil/gpencil_select.c
+++ b/source/blender/editors/gpencil/gpencil_select.c
@@ -84,6 +84,23 @@ static int gpencil_select_mode_from_sculpt(eGP_Sculpt_SelectMaskFlag mode)
   }
 }
 
+/* Convert vertex mask mode to Select mode */
+static int gpencil_select_mode_from_vertex(eGP_Sculpt_SelectMaskFlag mode)
+{
+  if (mode & GP_VERTEX_MASK_SELECTMODE_POINT) {
+    return GP_SELECTMODE_POINT;
+  }
+  else if (mode & GP_VERTEX_MASK_SELECTMODE_STROKE) {
+    return GP_SELECTMODE_STROKE;
+  }
+  else if (mode & GP_VERTEX_MASK_SELECTMODE_SEGMENT) {
+    return GP_SELECTMODE_SEGMENT;
+  }
+  else {
+    return GP_SELECTMODE_POINT;
+  }
+}
+
 static bool gpencil_select_poll(bContext *C)
 {
   bGPdata *gpd = ED_gpencil_data_get_active(C);
@@ -976,13 +993,21 @@ static int gpencil_circle_select_exec(bContext *C, wmOperator *op)
   ToolSettings *ts = CTX_data_tool_settings(C);
   Object *ob = CTX_data_active_object(C);
 
-  const int selectmode = (ob && ob->mode == OB_MODE_SCULPT_GPENCIL) ?
-                             gpencil_select_mode_from_sculpt(ts->gpencil_selectmode_sculpt) :
-                             ts->gpencil_selectmode_edit;
+  int selectmode;
+  if (ob && ob->mode == OB_MODE_SCULPT_GPENCIL) {
+    selectmode = gpencil_select_mode_from_sculpt(ts->gpencil_selectmode_sculpt);
+  }
+  else if (ob && ob->mode == OB_MODE_VERTEX_GPENCIL) {
+    selectmode = gpencil_select_mode_from_vertex(ts->gpencil_selectmode_vertex);
+  }
+  else {
+    selectmode = ts->gpencil_selectmode_edit;
+  }
+
   const float scale = ts->gp_sculpt.isect_threshold;
 
   /* if not edit/sculpt mode, the event is catched but not processed */
-  if (GPENCIL_NONE_EDIT_MODE(gpd)) {
+  if ((GPENCIL_NONE_EDIT_MODE(gpd)) && (GPENCIL_VERTEX_MODE(gpd))) {
     return OPERATOR_CANCELLED;
   }
 
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index 753eb91a116..ef650c37892 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -793,6 +793,42 @@ static void rna_Gpencil_mask_segment_update(Main *UNUSED(bmain),
   ts->gpencil_selectmode_sculpt &= ~GP_SCULPT_MASK_SELECTMODE_STROKE;
 }
 
+static void rna_Gpencil_vertex_mask_point_update(Main *UNUSED(bmain),
+                                                 Scene *scene,
+                                                 PointerRNA *ptr)
+{
+  ToolSettings *ts = (ToolSettings *)ptr->data;
+
+  ts->gpencil_selectmode_vertex &= ~GP_VERTEX_MASK_SELECTMODE_STROKE;
+  ts->gpencil_selectmode_vertex &= ~GP_VERTEX_MASK_SELECTMODE_SEGMENT;
+
+  ED_gpencil_tag_scene_gpencil(scene);
+}
+
+static void rna_Gpencil_vertex_mask_stroke_update(Main *UNUSED(bmain),
+                                                  Scene *scene,
+                                                  PointerRNA *ptr)
+{
+  ToolSettings *ts = (ToolSettings *)ptr->data;
+
+  ts->gpencil_selectmode_vertex &= ~GP_VERTEX_MASK_SELECTMODE_POINT;
+  ts->gpencil_selectmode_vertex &= ~GP_VERTEX_MASK_SELECTMODE_SEGMENT;
+
+  ED_gpencil_tag_scene_gpencil(scene);
+}
+
+static void rna_Gpencil_vertex_mask_segment_update(Main *UNUSED(bmain),
+                                                   Scene *scene,
+                                                   PointerRNA *ptr)
+{
+  ToolSettings *ts = (ToolSettings *)ptr->data;
+
+  ts->gpencil_selectmode_vertex &= ~GP_VERTEX_MASK_SELECTMODE_POINT;
+  ts->gpencil_selectmode_vertex &= ~GP_VERTEX_MASK_SELECTMODE_STROKE;
+
+  ED_gpencil_tag_scene_gpencil(scene);
+}
+
 /* Read-only Iterator of all the scene objects. */
 
 static void rna_Scene_objects_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
@@ -3177,7 +3213,8 @@ static void rna_def_tool_settings(BlenderRNA *brna)
   RNA_def_property_ui_text(prop, "Selection Mask", "Only paint selected stroke points");
   RNA_def_property_ui_icon(prop, ICON_GP_SELECT_POINTS, 0);
   RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
-  RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_Gpencil_mask_point_update");
+  RNA_def_property_update(
+      prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_Gpencil_vertex_mask_point_update");
 
   prop = RNA_def_property(srna, "use_gpencil_vertex_select_mask_stroke", PROP_BOOLEAN, PROP_NONE);
   RNA_def_property_boolean_sdna(
@@ -3185,7 +3222,8 @@ static void rna_def_tool_settings(BlenderRNA *brna)
   RNA_def_property_ui_text(prop, "Selection Mask", "Only paint selected stroke");
   RNA_def_property_ui_icon(prop, ICON_GP_SELECT_STROKES, 0);
   RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
-  RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_Gpencil_mask_stroke_update");
+  RNA_def_property_update(
+      prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_Gpencil_vertex_mask_stroke_update");
 
   prop = RNA_def_property(srna, "use_gpencil_vertex_select_mask_segment", PROP_BOOLEAN, PROP_NONE);
   RNA_def_property_boolean_sdna(
@@ -3194,7 +3232,8 @@ static void rna_def_tool_settings(BlenderRNA *brna)
       prop, "Selection Mask", "Only paint selected stroke points between other strokes");
   RNA_def_property_ui_icon(prop, ICON_GP_SELECT_BETWEEN_STROKES, 0);
   RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
-  RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_Gpencil_mask_segment_

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list