[Bf-blender-cvs] [cbd15d1452a] greasepencil-object: WIP: More work to get better drawing feeling
Antonio Vazquez
noreply at git.blender.org
Fri Nov 10 19:15:21 CET 2017
Commit: cbd15d1452a41de91e33a29f50aaf8b750fd9964
Author: Antonio Vazquez
Date: Fri Nov 10 19:14:58 2017 +0100
Branches: greasepencil-object
https://developer.blender.org/rBcbd15d1452a41de91e33a29f50aaf8b750fd9964
WIP: More work to get better drawing feeling
Thre was some problems in previous commits
===================================================================
M source/blender/editors/gpencil/gpencil_paint.c
M source/blender/makesdna/DNA_gpencil_types.h
M source/blender/makesrna/intern/rna_scene.c
===================================================================
diff --git a/source/blender/editors/gpencil/gpencil_paint.c b/source/blender/editors/gpencil/gpencil_paint.c
index c65d0d6feab..8d74748f447 100644
--- a/source/blender/editors/gpencil/gpencil_paint.c
+++ b/source/blender/editors/gpencil/gpencil_paint.c
@@ -490,19 +490,19 @@ static void copy_v2float_v2int(float r[2], const int a[2])
* \param gpd Current gp datablock
* \param inf Amount of smoothing to apply
*/
-static bool gp_smooth_buffer_point(bGPdata *gpd, bGPDbrush *brush)
+static void gp_smooth_buffer_point(bGPdata *gpd, bGPDbrush *brush)
{
tGPspoint *pt, *pta, *ptb;
- float fpt[2], fpta[2], fptb[2], vab[2], vac[2];
+ float fpt[2], fpta[2], fptb[2], vab[2], vac[2], vba[2], vbc[2];
float estimated_co[2] = { 0.0f };
float sco[3] = { 0.0f };
float inf = brush->draw_stabifac;
- const float draw_stabangle = 1.0f - brush->draw_stabangle;
+ const float draw_stabangle = cos(brush->draw_stabangle);
const float draw_pxdensity = brush->draw_pxdensity * brush->draw_pxdensity;
/* if no stabilization, return */
if (brush->draw_stabifac == 0) {
- return false;
+ return;
}
/* the influence never can be 1. We keep the range between 0 and 1 on the UI for
@@ -514,7 +514,7 @@ static bool gp_smooth_buffer_point(bGPdata *gpd, bGPDbrush *brush)
/* Do nothing if not enough points to smooth out */
if (gpd->sbuffer_size < 3) {
- return false;
+ return;
}
int i = gpd->sbuffer_size - 1;
@@ -533,6 +533,18 @@ static bool gp_smooth_buffer_point(bGPdata *gpd, bGPDbrush *brush)
copy_v2float_v2int(fptb, &ptb->x);
copy_v2float_v2int(fpt, &pt->x);
+ /* verify the new point is not changing in oposite direction and return to avoid
+ * that sharp corners can be cleared by smooth process
+ */
+ sub_v2_v2v2(vba, fpta, fptb);
+ sub_v2_v2v2(vbc, fpt, fptb);
+ normalize_v2(vba);
+ normalize_v2(vbc);
+ float angle_ba_bc = dot_v2v2(vba, vbc);
+ if (angle_ba_bc >= 0.0f) {
+ return;
+ }
+
float sqsize_ac = len_squared_v2v2(fpta, fpt);
float lambda = closest_to_line_v2(estimated_co, fpt, fpta, fptb);
/* need a minimum space between points to apply */
@@ -562,8 +574,8 @@ static bool gp_smooth_buffer_point(bGPdata *gpd, bGPDbrush *brush)
normalize_v2(vac);
/* as the vectors are normalized, we can use dot product to calculate cosine */
- float angle = dot_v2v2(vab, vac);
- /* if the angle is minimun, means the point can be removed, so rollback one point */
+ float angle = fabs(dot_v2v2(vab, vac));
+ /* if the angle is below minimun, means the point can be removed, so rollback one point */
if ((angle > draw_stabangle) && (sqsize_ab < draw_pxdensity * 3.0f)) {
ptb->x = pt->x;
ptb->y = pt->y;
@@ -573,7 +585,7 @@ static bool gp_smooth_buffer_point(bGPdata *gpd, bGPDbrush *brush)
gpd->sbuffer_size--;
}
- return true;
+ return;
}
diff --git a/source/blender/makesdna/DNA_gpencil_types.h b/source/blender/makesdna/DNA_gpencil_types.h
index 1d1619ec493..dd061031391 100644
--- a/source/blender/makesdna/DNA_gpencil_types.h
+++ b/source/blender/makesdna/DNA_gpencil_types.h
@@ -43,7 +43,7 @@ struct GHash;
#define GP_DEFAULT_PIX_FACTOR 500
#define GP_MIN_STROKE_SEGMENT_PX 8.0f
-#define GP_MIN_STROKE_SEGMENT_ANGLE 0.005f
+#define GP_MIN_STROKE_SEGMENT_ANGLE DEG2RAD(2.0f)
/* ***************************************** */
/* GP Point Weights */
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index 6778dc4f8ef..cf51f045d5b 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -2341,9 +2341,9 @@ static void rna_def_gpencil_brush(BlenderRNA *brna)
RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, NULL);
/* Noise factor for new strokes while drawing */
- prop = RNA_def_property(srna, "pen_noise_factor", PROP_FLOAT, PROP_NONE);
+ prop = RNA_def_property(srna, "pen_noise_factor", PROP_FLOAT, PROP_ANGLE);
RNA_def_property_float_sdna(prop, NULL, "draw_stabangle");
- RNA_def_property_range(prop, 0.0, 1.0f);
+ RNA_def_property_range(prop, DEG2RAD(0.0f), DEG2RAD(180.0f));
RNA_def_property_float_default(prop, GP_MIN_STROKE_SEGMENT_ANGLE);
RNA_def_property_ui_text(prop, "Noise",
"Factor to determine below what noise the point must not be used to define stroke shape");
More information about the Bf-blender-cvs
mailing list