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
This commit is contained in:
parent
6f28c199b3
commit
6704372f04
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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. */
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue