[Bf-blender-cvs] [064f132000d] greasepencil-object: GPencil: New Vertex Paint Replace Tool

Antonio Vazquez noreply at git.blender.org
Sat Nov 9 11:01:35 CET 2019


Commit: 064f132000d4d2058250723b5b7e5269800a4d7a
Author: Antonio Vazquez
Date:   Sat Nov 9 11:01:27 2019 +0100
Branches: greasepencil-object
https://developer.blender.org/rB064f132000d4d2058250723b5b7e5269800a4d7a

GPencil: New Vertex Paint Replace Tool

This tool replaces the old mixed color with the current one, but keeps the same mix factor. This is not possible with Draw tool, because the draw tool replaces the mix factor.

With this tool is very easy tint previous colors, but keeping the same mix and pressure values to maintain the same artistic look and feel.

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

M	release/scripts/modules/bl_keymap_utils/keymap_hierarchy.py
M	release/scripts/presets/keyconfig/keymap_data/blender_default.py
M	release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py
M	source/blender/blenkernel/intern/brush.c
M	source/blender/editors/gpencil/gpencil_ops.c
M	source/blender/editors/gpencil/gpencil_vertex_paint.c
M	source/blender/editors/interface/interface_icons.c
M	source/blender/editors/screen/area.c
M	source/blender/makesdna/DNA_brush_types.h
M	source/blender/makesrna/intern/rna_brush.c

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

diff --git a/release/scripts/modules/bl_keymap_utils/keymap_hierarchy.py b/release/scripts/modules/bl_keymap_utils/keymap_hierarchy.py
index 1ceb24c68db..3802ec0000f 100644
--- a/release/scripts/modules/bl_keymap_utils/keymap_hierarchy.py
+++ b/release/scripts/modules/bl_keymap_utils/keymap_hierarchy.py
@@ -203,6 +203,7 @@ _km_hierarchy = [
         ('Grease Pencil Stroke Vertex (Blur)', 'EMPTY', 'WINDOW', []),
         ('Grease Pencil Stroke Vertex (Average)', 'EMPTY', 'WINDOW', []),
         ('Grease Pencil Stroke Vertex (Smear)', 'EMPTY', 'WINDOW', []),
+        ('Grease Pencil Stroke Vertex (Replace)', 'EMPTY', 'WINDOW', []),
     ]),
     ('Mask Editing', 'EMPTY', 'WINDOW', []),
     ('Frames', 'EMPTY', 'WINDOW', []),    # frame navigation (per region)
diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
index 5de0e04c3e5..c84d43c41ba 100644
--- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py
+++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
@@ -3476,6 +3476,26 @@ def km_grease_pencil_stroke_vertex_smear(params):
     return keymap
 
 
+def km_grease_pencil_stroke_vertex_replace(params):
+    items = []
+    keymap = (
+        "Grease Pencil Stroke Vertex (Replace)",
+        {"space_type": 'EMPTY', "region_type": 'WINDOW'},
+        {"items": items},
+    )
+
+    items.extend([
+        # Tint
+        ("gpencil.vertex_paint", {"type": 'LEFTMOUSE', "value": 'PRESS'},
+         {"properties": [("wait_for_input", False)]}),
+        # Brush size
+        ("wm.radial_control", {"type": 'F', "value": 'PRESS'},
+         {"properties": [("data_path_primary", 'tool_settings.gpencil_vertex_paint.brush.size')]}),
+    ])
+
+    return keymap
+
+
 def km_face_mask(params):
     items = []
     keymap = (
@@ -6279,6 +6299,7 @@ def generate_keymaps(params=None):
         km_grease_pencil_stroke_vertex_blur(params),
         km_grease_pencil_stroke_vertex_average(params),
         km_grease_pencil_stroke_vertex_smear(params),
+        km_grease_pencil_stroke_vertex_replace(params),
         km_face_mask(params),
         km_weight_paint_vertex_selection(params),
         km_pose(params),
diff --git a/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py b/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py
index 037c3462dd7..b9b3d6a6515 100644
--- a/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py
+++ b/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py
@@ -2566,7 +2566,7 @@ def km_grease_pencil_stroke_vertex_mode(params):
         op_tool("builtin_brush.Blur", {"type": 'F', "value": 'PRESS'}),
         op_tool("builtin_brush.Average", {"type": 'E', "value": 'PRESS'}),
         op_tool("builtin.brush.Smear", {"type": 'K', "value": 'PRESS'}),
-
+        op_tool("builtin.brush.Replace", {"type": 'R', "value": 'PRESS'}),
     ])
 
     return keymap
@@ -2670,6 +2670,26 @@ def km_grease_pencil_stroke_vertex_smear(params):
 
     return keymap
 
+
+def km_grease_pencil_stroke_vertex_replace(params):
+    items = []
+    keymap = (
+        "Grease Pencil Stroke Vertex (Replace)",
+        {"space_type": 'EMPTY', "region_type": 'WINDOW'},
+        {"items": items},
+    )
+
+    items.extend([
+        # Tint
+        ("gpencil.vertex_paint", {"type": 'LEFTMOUSE', "value": 'PRESS'},
+         {"properties": [("wait_for_input", False)]}),
+        # Brush size
+        ("wm.radial_control", {"type": 'F', "value": 'PRESS'},
+         {"properties": [("data_path_primary", 'tool_settings.gpencil_vertex_paint.brush.size')]}),
+    ])
+
+    return keymap
+
 def km_face_mask(params):
     items = []
     keymap = (
@@ -3945,6 +3965,7 @@ def generate_keymaps(params=None):
         km_grease_pencil_stroke_vertex_blur(params),
         km_grease_pencil_stroke_vertex_average(params),
         km_grease_pencil_stroke_vertex_smear(params),
+        km_grease_pencil_stroke_vertex_replace(params),
         km_face_mask(params),
         km_weight_paint_vertex_selection(params),
         km_pose(params),
diff --git a/source/blender/blenkernel/intern/brush.c b/source/blender/blenkernel/intern/brush.c
index 34be3503c33..881e70d60ad 100644
--- a/source/blender/blenkernel/intern/brush.c
+++ b/source/blender/blenkernel/intern/brush.c
@@ -733,6 +733,23 @@ void BKE_brush_gpencil_presets(Main *bmain, ToolSettings *ts)
   brush->gpencil_settings->icon_id = GP_BRUSH_ICON_VERTEX_SMEAR;
   brush->gpencil_vertex_tool = GPVERTEX_TOOL_SMEAR;
 
+  /* Vertex Replace brush. */
+  brush = gpencil_brush_ensure(bmain, ts, "Vertex Replace", OB_MODE_VERTEX_GPENCIL);
+
+  brush->size = 25.0f;
+  brush->gpencil_settings->flag |= (GP_BRUSH_USE_PRESSURE | GP_BRUSH_ENABLE_CURSOR);
+
+  brush->gpencil_settings->draw_strength = 0.8f;
+  brush->gpencil_settings->flag |= GP_BRUSH_USE_STENGTH_PRESSURE;
+  brush->rgb[0] = 0.757f;
+  brush->rgb[1] = 0.659f;
+  brush->rgb[2] = 0.824f;
+
+  zero_v3(brush->secondary_rgb);
+
+  brush->gpencil_settings->icon_id = GP_BRUSH_ICON_VERTEX_REPLACE;
+  brush->gpencil_vertex_tool = GPVERTEX_TOOL_REPLACE;
+
   /* Set default Vertex brush. */
   BKE_paint_brush_set(vertexpaint, deft_vertex);
 
diff --git a/source/blender/editors/gpencil/gpencil_ops.c b/source/blender/editors/gpencil/gpencil_ops.c
index ddc9ca5f059..f5b530161e6 100644
--- a/source/blender/editors/gpencil/gpencil_ops.c
+++ b/source/blender/editors/gpencil/gpencil_ops.c
@@ -208,6 +208,12 @@ static bool gp_stroke_vertexmode_smear_poll(bContext *C)
   return gp_stroke_vertexmode_poll_with_tool(C, GPVERTEX_TOOL_SMEAR);
 }
 
+/* Poll callback for vertex painting (replace) */
+static bool gp_stroke_vertexmode_replace_poll(bContext *C)
+{
+  return gp_stroke_vertexmode_poll_with_tool(C, GPVERTEX_TOOL_REPLACE);
+}
+
 /* Stroke Editing Keymap - Only when editmode is enabled */
 static void ed_keymap_gpencil_editing(wmKeyConfig *keyconf)
 {
@@ -283,24 +289,30 @@ static void ed_keymap_gpencil_vertexpainting_draw(wmKeyConfig *keyconf)
   keymap->poll = gp_stroke_vertexmode_draw_poll;
 }
 
-/* keys for vertex with a draw brush */
+/* keys for vertex with a blur brush */
 static void ed_keymap_gpencil_vertexpainting_blur(wmKeyConfig *keyconf)
 {
   wmKeyMap *keymap = WM_keymap_ensure(keyconf, "Grease Pencil Stroke Vertex (Blur)", 0, 0);
   keymap->poll = gp_stroke_vertexmode_blur_poll;
 }
-/* keys for vertex with a draw brush */
+/* keys for vertex with a average brush */
 static void ed_keymap_gpencil_vertexpainting_average(wmKeyConfig *keyconf)
 {
   wmKeyMap *keymap = WM_keymap_ensure(keyconf, "Grease Pencil Stroke Vertex (Average)", 0, 0);
   keymap->poll = gp_stroke_vertexmode_average_poll;
 }
-/* keys for vertex with a draw brush */
+/* keys for vertex with a smear brush */
 static void ed_keymap_gpencil_vertexpainting_smear(wmKeyConfig *keyconf)
 {
   wmKeyMap *keymap = WM_keymap_ensure(keyconf, "Grease Pencil Stroke Vertex (Smear)", 0, 0);
   keymap->poll = gp_stroke_vertexmode_smear_poll;
 }
+/* keys for vertex with a replace brush */
+static void ed_keymap_gpencil_vertexpainting_replace(wmKeyConfig *keyconf)
+{
+  wmKeyMap *keymap = WM_keymap_ensure(keyconf, "Grease Pencil Stroke Vertex (Replace)", 0, 0);
+  keymap->poll = gp_stroke_vertexmode_replace_poll;
+}
 
 /* ==================== */
 
@@ -320,6 +332,7 @@ void ED_keymap_gpencil(wmKeyConfig *keyconf)
   ed_keymap_gpencil_vertexpainting_blur(keyconf);
   ed_keymap_gpencil_vertexpainting_average(keyconf);
   ed_keymap_gpencil_vertexpainting_smear(keyconf);
+  ed_keymap_gpencil_vertexpainting_replace(keyconf);
 }
 
 /* ****************************************** */
diff --git a/source/blender/editors/gpencil/gpencil_vertex_paint.c b/source/blender/editors/gpencil/gpencil_vertex_paint.c
index df875e8385a..137749b682a 100644
--- a/source/blender/editors/gpencil/gpencil_vertex_paint.c
+++ b/source/blender/editors/gpencil/gpencil_vertex_paint.c
@@ -282,6 +282,37 @@ static bool brush_tint_apply(tGP_BrushVertexpaintData *gso,
   return true;
 }
 
+/* Replace Brush (Don't use pressure or invert). */
+static bool brush_replace_apply(tGP_BrushVertexpaintData *gso,
+                                bGPDstroke *gps,
+                                int pt_index,
+                                const int radius,
+                                const int co[2])
+{
+  Brush *brush = gso->brush;
+  bGPDspoint *pt = &gps->points[pt_index];
+
+  /* Apply color to Stroke point. */
+  if (GPENCIL_TINT_VERTEX_COLOR_STROKE(brush)) {
+    copy_v3_v3(pt->mix_color, brush->rgb);
+    /* If not mix color, full replace. */
+    if (pt->mix_color[3] == 0.0f) {
+      pt->mix_color[3] = 1.0f;
+    }
+  }
+
+  /* Apply color to Fill area (all with same color and factor). */
+  if (GPENCIL_TINT_VERTEX_COLOR_FILL(brush)) {
+    copy_v3_v3(gps->mix_color_fill, brush->rgb);
+    /* If not mix color, full replace. */
+    if (gps->mix_color_fill[3] == 0.0f) {
+      gps->mix_color_fill[3] = 1.0f;
+    }
+  }
+
+  return true;
+}
+
 /* ************************************************ */
 /* Header Info */
 static void gp_vertexpaint_brush_header_set(bContext *C, tGP_BrushVertexpaintData *UNUSED(gso))
@@ -568,6 +599,11 @@ static bool gp_vertexpaint_brush_do_frame(bContext *C,
         changed |= true;
         break;
       }
+      case GPVERTEX_TOOL_REPLACE: {
+        brush_replace_apply(gso, selected->gps, selected->pt_index, radius, selected->pc);
+        changed |= true;
+        break;
+      }
 
       default:
         printf("ERROR: Unknown type of GPencil Vertex Paint brush\n");
diff --git a/source/blender/editors/interface/interface_icons.c b/source/blender/editors/interface/interface_icons.c
index d75c0ad5115..047ad06e3fa 100644
--- a/source/blender/editors/interface/interface_icons.c
+++ b/source/blender/editors/interface/interface_icons.c
@@ -2092,6 +2092,9 @@ static int ui_id_brush_get_icon(const bContext *C, ID *id)
         case GP_BRUSH_ICON_VERTEX_SMEAR:
           br->id.icon_id = ICON_BRUSH_BLUR;
           break;
+        case GP_BRUSH_ICON_VERTEX_REPLACE:
+          br->id.icon_id = ICON_BRUSH_MIX;
+          break;
         default:
           br-

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list