[Bf-blender-cvs] [2d9e869b18b] soc-2020-greasepencil-curve: GPencil: Fix coordinate influence fitting problem
Falk David
noreply at git.blender.org
Thu Jul 23 13:59:30 CEST 2020
Commit: 2d9e869b18b96c66072e9fa1568b1abe3e10c6b1
Author: Falk David
Date: Thu Jul 23 13:36:09 2020 +0200
Branches: soc-2020-greasepencil-curve
https://developer.blender.org/rB2d9e869b18b96c66072e9fa1568b1abe3e10c6b1
GPencil: Fix coordinate influence fitting problem
The coordinates had a two small influence in the curve fitting.
All the values are now normalized and a factor used to make the
shape of the stroke more important.
===================================================================
M source/blender/blenkernel/intern/gpencil_curve.c
===================================================================
diff --git a/source/blender/blenkernel/intern/gpencil_curve.c b/source/blender/blenkernel/intern/gpencil_curve.c
index 982cea69901..f7a1133f76a 100644
--- a/source/blender/blenkernel/intern/gpencil_curve.c
+++ b/source/blender/blenkernel/intern/gpencil_curve.c
@@ -53,6 +53,8 @@
#include "DEG_depsgraph_query.h"
+#define COORD_FITTING_INFLUENCE 20.0f
+
/* Helper: Check materials with same color. */
static int gpencil_check_same_material_color(Object *ob_gp, float color[4], Material **r_mat)
{
@@ -484,11 +486,12 @@ bGPDcurve *BKE_gpencil_stroke_editcurve_generate(bGPDstroke *gps, float error_th
/* normalize coordinate to 0..1 */
sub_v3_v3v3(tmp_vec, &pt->x, gps->boundbox_min);
- mul_v3_v3fl(&points[row], tmp_vec, 1.0f / diag_length);
+ mul_v3_v3fl(&points[row], tmp_vec, COORD_FITTING_INFLUENCE / diag_length);
+ points[row + 3] = pt->pressure / diag_length;
- points[row + 3] = pt->pressure;
- points[row + 4] = pt->strength;
- copy_v4_v4(&points[row + 5], pt->vert_color);
+ /* strength and color are already normalized */
+ points[row + 4] = pt->strength / diag_length;
+ mul_v4_v4fl(&points[row + 5], pt->vert_color, 1.0f / diag_length);
}
uint calc_flag = CURVE_FIT_CALC_HIGH_QUALIY;
@@ -533,15 +536,13 @@ bGPDcurve *BKE_gpencil_stroke_editcurve_generate(bGPDstroke *gps, float error_th
for (int j = 0; j < 3; j++) {
float *bez = &curve_point[j * POINT_DIM];
- copy_v3_v3(tmp_vec, bez);
- mul_v3_fl(tmp_vec, diag_length);
- add_v3_v3v3(bezt->vec[j], tmp_vec, gps->boundbox_min);
+ madd_v3_v3v3fl(bezt->vec[j], gps->boundbox_min, bez, diag_length / COORD_FITTING_INFLUENCE);
}
float *ctrl_point = &curve_point[1 * POINT_DIM];
- cpt->pressure = ctrl_point[3];
- cpt->strength = ctrl_point[4];
- copy_v4_v4(cpt->vert_color, &ctrl_point[5]);
+ cpt->pressure = ctrl_point[3] * diag_length;
+ cpt->strength = ctrl_point[4] * diag_length;
+ mul_v4_v4fl(cpt->vert_color, &ctrl_point[5], diag_length);
/* default handle type */
bezt->h1 |= HD_ALIGN;
More information about the Bf-blender-cvs
mailing list