[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