[Bf-blender-cvs] [6704372f047] master: GPencil: Allow small resolution for Fill tool

Antonio Vazquez noreply at git.blender.org
Thu Jan 14 12:58:41 CET 2021


Commit: 6704372f047c8bff0dfb073a30dcc9cf02c7ad89
Author: Antonio Vazquez
Date:   Thu Jan 14 12:54:02 2021 +0100
Branches: master
https://developer.blender.org/rB6704372f047c8bff0dfb073a30dcc9cf02c7ad89

GPencil: Allow small resolution for Fill tool

Now the resolution can be reduced to get less details. This is very useful for doing storyboards to get a quick fill of any character.

Following UI review, the name "Resolution" has been changed to "Precision" because is more clear.

Differential Revision: https://developer.blender.org/D10076

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

M	release/scripts/startup/bl_ui/space_view3d_toolbar.py
M	source/blender/blenkernel/intern/brush.c
M	source/blender/editors/gpencil/gpencil_fill.c
M	source/blender/makesdna/DNA_brush_types.h
M	source/blender/makesrna/intern/rna_brush.c

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

diff --git a/release/scripts/startup/bl_ui/space_view3d_toolbar.py b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
index 577f9678a62..60982421318 100644
--- a/release/scripts/startup/bl_ui/space_view3d_toolbar.py
+++ b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
@@ -1435,7 +1435,7 @@ class VIEW3D_PT_tools_grease_pencil_brush_advanced(View3DPanel, Panel):
                 row.prop(gp_settings, "fill_layer_mode", text="Layers")
 
                 col.separator()
-                col.prop(gp_settings, "fill_factor", text="Resolution")
+                col.prop(gp_settings, "fill_factor")
                 if gp_settings.fill_draw_mode != 'STROKE':
                     col = layout.column(align=False, heading="Ignore Transparent")
                     col.use_property_decorate = False
diff --git a/source/blender/blenkernel/intern/brush.c b/source/blender/blenkernel/intern/brush.c
index 9a954a89cad..ea1b0f8c1cc 100644
--- a/source/blender/blenkernel/intern/brush.c
+++ b/source/blender/blenkernel/intern/brush.c
@@ -978,7 +978,7 @@ void BKE_gpencil_brush_preset_set(Main *bmain, Brush *brush, const short type)
       brush->gpencil_settings->fill_leak = 3;
       brush->gpencil_settings->fill_threshold = 0.1f;
       brush->gpencil_settings->fill_simplylvl = 1;
-      brush->gpencil_settings->fill_factor = 1;
+      brush->gpencil_settings->fill_factor = 1.0f;
 
       brush->gpencil_settings->draw_strength = 1.0f;
       brush->gpencil_settings->hardeness = 1.0f;
diff --git a/source/blender/editors/gpencil/gpencil_fill.c b/source/blender/editors/gpencil/gpencil_fill.c
index 622556943c9..6d349bd2dd4 100644
--- a/source/blender/editors/gpencil/gpencil_fill.c
+++ b/source/blender/editors/gpencil/gpencil_fill.c
@@ -81,6 +81,7 @@
 
 #define LEAK_HORZ 0
 #define LEAK_VERT 1
+#define MIN_WINDOW_SIZE 128
 
 /* Temporary fill operation data (op->customdata) */
 typedef struct tGPDfill {
@@ -137,7 +138,7 @@ typedef struct tGPDfill {
   /** boundary limits drawing mode */
   int fill_draw_mode;
   /* scaling factor */
-  short fill_factor;
+  float fill_factor;
 
   /* Frame to use. */
   int active_cfra;
@@ -398,8 +399,8 @@ static bool gpencil_render_offscreen(tGPDfill *tgpf)
   /* resize region */
   tgpf->region->winrct.xmin = 0;
   tgpf->region->winrct.ymin = 0;
-  tgpf->region->winrct.xmax = (int)tgpf->region->winx * tgpf->fill_factor;
-  tgpf->region->winrct.ymax = (int)tgpf->region->winy * tgpf->fill_factor;
+  tgpf->region->winrct.xmax = max_ii((int)tgpf->region->winx * tgpf->fill_factor, MIN_WINDOW_SIZE);
+  tgpf->region->winrct.ymax = max_ii((int)tgpf->region->winy * tgpf->fill_factor, MIN_WINDOW_SIZE);
   tgpf->region->winx = (short)abs(tgpf->region->winrct.xmax - tgpf->region->winrct.xmin);
   tgpf->region->winy = (short)abs(tgpf->region->winrct.ymax - tgpf->region->winrct.ymin);
 
@@ -456,7 +457,7 @@ static bool gpencil_render_offscreen(tGPDfill *tgpf)
   }
 
   GPU_matrix_push_projection();
-  GPU_matrix_identity_set();
+  GPU_matrix_identity_projection_set();
   GPU_matrix_push();
   GPU_matrix_identity_set();
 
@@ -1394,11 +1395,12 @@ static tGPDfill *gpencil_session_init_fill(bContext *C, wmOperator *UNUSED(op))
   Brush *brush = BKE_paint_brush(&ts->gp_paint->paint);
   tgpf->brush = brush;
   tgpf->flag = brush->gpencil_settings->flag;
-  tgpf->fill_leak = brush->gpencil_settings->fill_leak;
   tgpf->fill_threshold = brush->gpencil_settings->fill_threshold;
   tgpf->fill_simplylvl = brush->gpencil_settings->fill_simplylvl;
   tgpf->fill_draw_mode = brush->gpencil_settings->fill_draw_mode;
-  tgpf->fill_factor = (short)max_ii(1, min_ii((int)brush->gpencil_settings->fill_factor, 8));
+  tgpf->fill_factor = max_ff(GPENCIL_MIN_FILL_FAC,
+                             min_ff(brush->gpencil_settings->fill_factor, 8.0f));
+  tgpf->fill_leak = (int)ceil((float)brush->gpencil_settings->fill_leak * tgpf->fill_factor);
 
   int totcol = tgpf->ob->totcol;
 
diff --git a/source/blender/makesdna/DNA_brush_types.h b/source/blender/makesdna/DNA_brush_types.h
index 4b020019062..e373500a0ed 100644
--- a/source/blender/makesdna/DNA_brush_types.h
+++ b/source/blender/makesdna/DNA_brush_types.h
@@ -47,10 +47,13 @@ typedef struct BrushClone {
   char _pad[4];
 } BrushClone;
 
+#define GPENCIL_MIN_FILL_FAC 0.05f
+
 typedef struct BrushGpencilSettings {
   /** Amount of smoothing to apply to newly created strokes. */
   float draw_smoothfac;
-  char _pad2[4];
+  /** Fill zoom factor */
+  float fill_factor;
   /** Amount of alpha strength to apply to newly created strokes. */
   float draw_strength;
   /** Amount of jitter to apply to newly created strokes. */
@@ -75,8 +78,8 @@ typedef struct BrushGpencilSettings {
   float fill_threshold;
   /** Number of pixel to consider the leak is too small (x 2). */
   short fill_leak;
-  /** Fill zoom factor */
-  short fill_factor;
+  char _pad2[2];
+
   int flag2;
 
   /** Number of simplify steps. */
diff --git a/source/blender/makesrna/intern/rna_brush.c b/source/blender/makesrna/intern/rna_brush.c
index 2af6c04147c..4f98c6e8e07 100644
--- a/source/blender/makesrna/intern/rna_brush.c
+++ b/source/blender/makesrna/intern/rna_brush.c
@@ -1464,13 +1464,13 @@ static void rna_def_gpencil_options(BlenderRNA *brna)
   RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, NULL);
 
   /* fill factor size */
-  prop = RNA_def_property(srna, "fill_factor", PROP_INT, PROP_NONE);
-  RNA_def_property_int_sdna(prop, NULL, "fill_factor");
-  RNA_def_property_range(prop, 1, 8);
+  prop = RNA_def_property(srna, "fill_factor", PROP_FLOAT, PROP_NONE);
+  RNA_def_property_float_sdna(prop, NULL, "fill_factor");
+  RNA_def_property_range(prop, GPENCIL_MIN_FILL_FAC, 8.0f);
   RNA_def_property_ui_text(
       prop,
-      "Resolution",
-      "Multiplier for fill resolution, higher resolution is more accurate but slower");
+      "Precision",
+      "Factor for fill boundary accuracy, higher values are more accurate but slower");
   RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
   RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, NULL);



More information about the Bf-blender-cvs mailing list