From 9714cfe4a72b8bf8f61d917bbfdeb31397fe4f0c Mon Sep 17 00:00:00 2001 From: "Spivak Vladimir (cwolf3d)" Date: Mon, 18 Nov 2019 01:23:52 +0200 Subject: Addon: Curve Tools: Outline now works for all curve types --- curve_tools/outline.py | 69 ++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 55 insertions(+), 14 deletions(-) (limited to 'curve_tools/outline.py') diff --git a/curve_tools/outline.py b/curve_tools/outline.py index 66cc29e4..3975a403 100644 --- a/curve_tools/outline.py +++ b/curve_tools/outline.py @@ -24,8 +24,8 @@ bl_info = { "name": "Curve Outline", "description": "creates an Outline", "category": "Object", - "author": "Yann Bertrand (jimflim)", - "version": (0, 4), + "author": "Yann Bertrand (jimflim), Vladimir Spivak (cwolf3d)", + "version": (0, 5), "blender": (2, 69, 0), } @@ -41,20 +41,27 @@ def createOutline(curve, outline): for spline in curve.data.splines[:]: if spline.type == 'BEZIER': p = spline.bezier_points + if len(p) < 2: + return out = [] - n = ((p[0].handle_right-p[0].co).normalized()-(p[0].handle_left-p[0].co).normalized()).normalized() + n = ((p[0].handle_right - p[0].co).normalized() - (p[0].handle_left - p[0].co).normalized()).normalized() n = Vector((-n[1], n[0], n[2])) - o = p[0].co+outline*n + o = p[0].co + outline * n out.append(o) - for i in range(1,len(p)): - n = ((p[i].handle_right-p[i].co).normalized()-(p[i].handle_left-p[i].co).normalized()).normalized() + for i in range(1,len(p)-1): + n = ((p[i].handle_right - p[i].co).normalized() - (p[i].handle_left - p[i].co).normalized()).normalized() n = Vector((-n[1], n[0], n[2])) - o = intersect_line_line(out[-1], (out[-1]+p[i].co-p[i-1].co), p[i].co, p[i].co+n)[0] + o = intersect_line_line(out[-1], (out[-1]+p[i].co - p[i-1].co), p[i].co, p[i].co + n)[0] out.append(o) + + n = ((p[-1].handle_right - p[-1].co).normalized() - (p[-1].handle_left - p[-1].co).normalized()).normalized() + n = Vector((-n[1], n[0], n[2])) + o = p[-1].co + outline * n + out.append(o) - curve.data.splines.new('BEZIER') + curve.data.splines.new(spline.type) if spline.use_cyclic_u: curve.data.splines[-1].use_cyclic_u = True p_out = curve.data.splines[-1].bezier_points @@ -67,19 +74,53 @@ def createOutline(curve, outline): p_out[i].co = out[i] if i