[Bf-blender-cvs] [9c68312] temp-curve-draw: Avoid divide by zero, comment when its OK

Campbell Barton noreply at git.blender.org
Thu Apr 14 18:40:34 CEST 2016


Commit: 9c6831273450f8cd850b0805ea65fd6b3b3632ce
Author: Campbell Barton
Date:   Fri Apr 15 02:39:57 2016 +1000
Branches: temp-curve-draw
https://developer.blender.org/rB9c6831273450f8cd850b0805ea65fd6b3b3632ce

Avoid divide by zero, comment when its OK

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

M	extern/curve_fit_nd/intern/curve_fit_cubic.c
M	source/blender/editors/curve/editcurve_paint.c

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

diff --git a/extern/curve_fit_nd/intern/curve_fit_cubic.c b/extern/curve_fit_nd/intern/curve_fit_cubic.c
index 145a9c7..13df028 100644
--- a/extern/curve_fit_nd/intern/curve_fit_cubic.c
+++ b/extern/curve_fit_nd/intern/curve_fit_cubic.c
@@ -452,6 +452,7 @@ static void cubic_from_points(
 			det_C0_C1 = c[0][0] * c[1][1] * 10e-12;
 		}
 
+		/* may still divide-by-zero, check below will catch nan values */
 		alpha_l = det_X_C1 / det_C0_C1;
 		alpha_r = det_C_0X / det_C0_C1;
 	}
@@ -640,6 +641,7 @@ static double cubic_find_root(
 	cubic_calc_speed(cubic, u, dims, q1_u);
 	cubic_calc_acceleration(cubic, u, dims, q2_u);
 
+	/* may divide-by-zero, caller must check for that case */
 	/* u - ((q0_u - p) * q1_u) / (q1_u.length_squared() + (q0_u - p) * q2_u) */
 	isub_vnvn(q0_u, p, dims);
 	return u - dot_vnvn(q0_u, q1_u, dims) /
diff --git a/source/blender/editors/curve/editcurve_paint.c b/source/blender/editors/curve/editcurve_paint.c
index 20150ff..d3f3696 100644
--- a/source/blender/editors/curve/editcurve_paint.c
+++ b/source/blender/editors/curve/editcurve_paint.c
@@ -507,7 +507,7 @@ static int curve_draw_exec(bContext *C, wmOperator *op)
 				len_2d += len_v2v2(selem->mouse, selem_prev->mouse);
 				selem_prev = selem;
 			}
-			scale_px = len_3d / len_2d;
+			scale_px = ((len_3d > 0.0f) && (len_2d > 0.0f)) ?  (len_3d / len_2d) : 0.0f;
 			error_threshold = (float)cps->error_threshold * scale_px;
 			RNA_property_float_set(op->ptr, prop_error, error_threshold);
 			printf("%.6f ~ %.6f ~ %.6f\n", scale_px, len_3d, len_2d);




More information about the Bf-blender-cvs mailing list