[Bf-blender-cvs] [d1b2c553220] sculpt-dev: Sculpt Expand: Brush Gradients

Pablo Dobarro noreply at git.blender.org
Wed Jan 20 18:56:55 CET 2021


Commit: d1b2c553220bbfafd792a1cd1e7381153720152e
Author: Pablo Dobarro
Date:   Wed Jan 20 18:17:19 2021 +0100
Branches: sculpt-dev
https://developer.blender.org/rBd1b2c553220bbfafd792a1cd1e7381153720152e

Sculpt Expand: Brush Gradients

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

M	release/scripts/presets/keyconfig/keymap_data/blender_default.py
M	source/blender/editors/sculpt_paint/sculpt_expand.c
M	source/blender/editors/sculpt_paint/sculpt_intern.h

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

diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
index b8f1aaefb6a..c7c0f7e4371 100644
--- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py
+++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
@@ -5544,6 +5544,7 @@ def km_sculpt_expand_modal(_params):
         ("SNAP_TOGGLE", {"type": 'Z', "value": 'ANY', "any": True, "repeat" : False}, None),
         ("LOOP_COUNT_INCREASE", {"type": 'W', "value": 'PRESS', "any": True, "repeat" : False}, None),
         ("LOOP_COUNT_DECREASE", {"type": 'Q', "value": 'PRESS', "any": True, "repeat" : False}, None),
+        ("BRUSH_GRADIENT_TOGGLE", {"type": 'B', "value": 'PRESS', "any": True, "repeat" : False}, None),
     ])
     return keymap
 
diff --git a/source/blender/editors/sculpt_paint/sculpt_expand.c b/source/blender/editors/sculpt_paint/sculpt_expand.c
index 76d9b7d3775..b5620c71e24 100644
--- a/source/blender/editors/sculpt_paint/sculpt_expand.c
+++ b/source/blender/editors/sculpt_paint/sculpt_expand.c
@@ -91,6 +91,7 @@ enum {
   SCULPT_EXPAND_MODAL_SNAP_TOGGLE,
   SCULPT_EXPAND_MODAL_LOOP_COUNT_INCREASE,
   SCULPT_EXPAND_MODAL_LOOP_COUNT_DECREASE,
+  SCULPT_EXPAND_MODAL_BRUSH_GRADIENT_TOGGLE,
 };
 
 static EnumPropertyItem prop_sculpt_expand_falloff_type_items[] = {
@@ -176,11 +177,20 @@ static float sculpt_expand_gradient_falloff_get(ExpandCache *expand_cache, const
   const float active_factor = fmod(expand_cache->active_factor, loop_len);
   const float falloff_factor = fmod(expand_cache->falloff_factor[i], loop_len);
 
+  float linear_falloff;
+
   if (expand_cache->invert) {
-    return (falloff_factor - active_factor) / (loop_len - active_factor);
+    linear_falloff =  (falloff_factor - active_factor) / (loop_len - active_factor);
+  }
+
+  linear_falloff = 1.0f - (falloff_factor / active_factor);
+
+  if (!expand_cache->brush_gradient) {
+      return linear_falloff;
   }
 
-  return 1.0f - (falloff_factor / active_factor);
+  return BKE_brush_curve_strength(expand_cache->brush, linear_falloff, 1.0f);
+
 }
 
 static float *sculpt_expand_geodesic_falloff_create(Sculpt *sd, Object *ob, const int vertex)
@@ -672,11 +682,16 @@ static void sculpt_expand_cache_free(ExpandCache *expand_cache)
   MEM_SAFE_FREE(expand_cache->falloff_factor);
   MEM_SAFE_FREE(expand_cache->face_falloff_factor);
   MEM_SAFE_FREE(expand_cache->initial_mask);
+  MEM_SAFE_FREE(expand_cache->origin_face_sets);
   MEM_SAFE_FREE(expand_cache->initial_face_sets);
   MEM_SAFE_FREE(expand_cache->initial_color);
   MEM_SAFE_FREE(expand_cache);
 }
 
+static void sculpt_expand_restore_original_state(SculptSession *ss, ExpandCache *expand_cache) {
+
+}
+
 static void sculpt_mask_expand_cancel(bContext *C, wmOperator *op)
 {
   Object *ob = CTX_data_active_object(C);
@@ -913,8 +928,10 @@ static void sculpt_expand_initial_state_store(Object *ob, ExpandCache *expand_ca
   }
 
   expand_cache->initial_face_sets = MEM_malloc_arrayN(totvert, sizeof(int), "initial face set");
+  expand_cache->origin_face_sets = MEM_malloc_arrayN(totvert, sizeof(int), "initial face set");
   for (int i = 0; i < totface; i++) {
     expand_cache->initial_face_sets[i] = ss->face_sets[i];
+    expand_cache->origin_face_sets[i] = ss->face_sets[i];
   }
 
   if (expand_cache->target == SCULPT_EXPAND_TARGET_COLORS) {
@@ -1113,6 +1130,10 @@ static int sculpt_expand_modal(bContext *C, wmOperator *UNUSED(op), const wmEven
         expand_cache->falloff_gradient = !expand_cache->falloff_gradient;
         break;
       }
+      case SCULPT_EXPAND_MODAL_BRUSH_GRADIENT_TOGGLE: {
+        expand_cache->brush_gradient = !expand_cache->brush_gradient;
+        break;
+      }
       case SCULPT_EXPAND_MODAL_SNAP_TOGGLE: {
         if (expand_cache->snap) {
           expand_cache->snap = false;
@@ -1276,14 +1297,16 @@ static void sculpt_expand_cache_initial_config_set(Sculpt *sd,
 
   /* TODO: Expose in RNA. */
   expand_cache->loop_count = 1;
+  expand_cache->brush_gradient = false;
 
   SculptSession *ss = ob->sculpt;
-  Brush *brush = BKE_paint_brush(&sd->paint);
+  expand_cache->brush = BKE_paint_brush(&sd->paint);
+  BKE_curvemapping_init(expand_cache->brush->curve);
   copy_v4_fl(expand_cache->fill_color, 1.0f);
-  copy_v3_v3(expand_cache->fill_color, BKE_brush_color_get(ss->scene, brush));
+  copy_v3_v3(expand_cache->fill_color, BKE_brush_color_get(ss->scene, expand_cache->brush));
   IMB_colormanagement_srgb_to_scene_linear_v3(expand_cache->fill_color);
 
-  expand_cache->blend_mode = brush->blend;
+  expand_cache->blend_mode = expand_cache->brush->blend;
 }
 
 static int sculpt_expand_invoke(bContext *C, wmOperator *op, const wmEvent *event)
@@ -1335,8 +1358,6 @@ static int sculpt_expand_invoke(bContext *C, wmOperator *op, const wmEvent *even
     falloff_type = SCULPT_EXPAND_FALLOFF_BOUNDARY_TOPOLOGY;
   }
 
-  ss->expand_cache->recursion_type = SCULPT_EXPAND_RECURSION_TOPOLOGY;
-
   sculpt_expand_falloff_factors_from_vertex_and_symm_create(
       ss->expand_cache, sd, ob, ss->expand_cache->initial_active_vertex, falloff_type);
 
@@ -1397,6 +1418,11 @@ void sculpt_expand_modal_keymap(wmKeyConfig *keyconf)
        0,
        "Loop Count Decrease",
        ""},
+      {SCULPT_EXPAND_MODAL_BRUSH_GRADIENT_TOGGLE,
+       "BRUSH_GRADIENT_TOGGLE",
+       0,
+       "Brush Gradient Toggle",
+       ""},
       {0, NULL, 0, NULL, NULL},
   };
 
diff --git a/source/blender/editors/sculpt_paint/sculpt_intern.h b/source/blender/editors/sculpt_paint/sculpt_intern.h
index c321f17ee6a..b4e9b3faf8b 100644
--- a/source/blender/editors/sculpt_paint/sculpt_intern.h
+++ b/source/blender/editors/sculpt_paint/sculpt_intern.h
@@ -1175,8 +1175,6 @@ typedef enum eSculptExpandRecursionType {
 typedef struct ExpandCache {
   eSculptExpandTargetType target;
 
-  eSculptExpandRecursionType recursion_type;
-
   eSculptExpandFalloffType falloff_factor_type;
   float *falloff_factor;
   float max_falloff_factor;
@@ -1203,6 +1201,9 @@ typedef struct ExpandCache {
   bool move;
   bool snap;
   bool modify_active;
+  bool brush_gradient;
+
+  Brush *brush;
 
   float initial_mouse_move[2];
   float original_mouse_move[2];
@@ -1213,6 +1214,7 @@ typedef struct ExpandCache {
 
   float *initial_mask;
   int *initial_face_sets;
+  int *origin_face_sets;
   float (*initial_color)[4];
 } ExpandCache;



More information about the Bf-blender-cvs mailing list