GPencil: New Dilate parameter for Fill brush

Internally, when using Fill brush a dilate of the filled area was done, but this was hardcoded to 1 pixel.

In some situations, this was not enough, so now the value is accesible in the UI and can be set with different values.

Also, as this value is more used than `Leak Size`, the new Dilate is on Topbar, and Leak Size has been moved to Advanced panel.
This commit is contained in:
Antonio Vazquez 2021-05-04 16:38:52 +02:00
parent 7904899d02
commit f8f6e0b256
7 changed files with 29 additions and 3 deletions

View File

@ -1225,7 +1225,7 @@ def brush_basic_gpencil_paint_settings(layout, context, brush, *, compact=False)
row = layout.row(align=True)
row.prop(gp_settings, "fill_factor")
row = layout.row(align=True)
row.prop(gp_settings, "fill_leak", text="Leak Size")
row.prop(gp_settings, "dilate_pixels")
row = layout.row(align=True)
row.prop(brush, "size", text="Thickness")
layout.use_property_split = use_property_split_prev

View File

@ -1467,6 +1467,9 @@ class VIEW3D_PT_tools_grease_pencil_brush_advanced(View3DPanel, Panel):
row.prop(gp_settings, "extend_stroke_factor")
row.prop(gp_settings, "show_fill_extend", text="", icon='GRID')
col.separator()
col.prop(gp_settings, "fill_leak", text="Leak Size")
col.separator()
col.prop(gp_settings, "fill_simplify_level", text="Simplify")
if gp_settings.fill_draw_mode != 'STROKE':

View File

@ -989,6 +989,7 @@ void BKE_gpencil_brush_preset_set(Main *bmain, Brush *brush, const short type)
brush->gpencil_settings->draw_smoothfac = 0.1f;
brush->gpencil_settings->draw_smoothlvl = 1;
brush->gpencil_settings->draw_subdivide = 1;
brush->gpencil_settings->dilate_pixels = 1;
brush->gpencil_settings->flag |= GP_BRUSH_FILL_SHOW_EXTENDLINES;

View File

@ -23,6 +23,7 @@
#include "BLI_listbase.h"
#include "BLI_utildefines.h"
#include "DNA_brush_types.h"
#include "DNA_genfile.h"
#include "DNA_modifier_types.h"
#include "DNA_text_types.h"
@ -74,6 +75,14 @@ void blo_do_versions_300(FileData *fd, Library *UNUSED(lib), Main *bmain)
}
}
}
/* Grease Pencil: Set default value for dilate pixels. */
if (!DNA_struct_elem_find(fd->filesdna, "BrushGpencilSettings", "int", "dilate_pixels")) {
LISTBASE_FOREACH (Brush *, brush, &bmain->brushes) {
if (brush->gpencil_settings) {
brush->gpencil_settings->dilate_pixels = 1;
}
}
}
}
/**
* Versioning code until next subversion bump goes here.

View File

@ -1247,6 +1247,7 @@ static bool dilate_shape(ImBuf *ibuf)
static void gpencil_get_outline_points(tGPDfill *tgpf, const bool dilate)
{
ImBuf *ibuf;
Brush *brush = tgpf->brush;
float rgba[4];
void *lock;
int v[2];
@ -1279,7 +1280,9 @@ static void gpencil_get_outline_points(tGPDfill *tgpf, const bool dilate)
/* Dilate. */
if (dilate) {
dilate_shape(ibuf);
for (int i = 0; i < brush->gpencil_settings->dilate_pixels; i++) {
dilate_shape(ibuf);
}
}
for (int idx = imagesize - 1; idx != 0; idx--) {

View File

@ -133,7 +133,8 @@ typedef struct BrushGpencilSettings {
/** Factor to extend stroke extremes using fill tool. */
float fill_extend_fac;
char _pad3[4];
/** Number of pixels to dilate fill area. */
int dilate_pixels;
struct CurveMapping *curve_sensitivity;
struct CurveMapping *curve_strength;

View File

@ -1617,6 +1617,15 @@ static void rna_def_gpencil_options(BlenderRNA *brna)
prop, "Stroke Extension", "Strokes end extension for closing gaps, use zero to disable");
RNA_def_parameter_clear_flags(prop, PROP_ANIMATABLE, 0);
/* Number of pixels to dilate fill area. */
prop = RNA_def_property(srna, "dilate_pixels", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "dilate_pixels");
RNA_def_property_range(prop, 0, 20);
RNA_def_property_int_default(prop, 1);
RNA_def_property_ui_text(prop, "Dilate", "Number of pixels to dilate fill area");
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, NULL);
/* Flags */
prop = RNA_def_property(srna, "use_pressure", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_BRUSH_USE_PRESSURE);