diff --git a/font.js b/font.js index d46899f..58122b0 100644 --- a/font.js +++ b/font.js @@ -1,5 +1,5 @@ { - var r0_font, r0_glyphList, r0_glyphs, r0_Glyph, r0_Stroke, r0_para_regular, r0_para_bold, r0_para_italic, r0_para_bolditalic, r0_variantSelector, r0_globalTransform, r0_UPWARD, r0_DOWNWARD, r0_RIGHTWARD, r0_LEFTWARD, r0_DESCENDER, r0_WIDTH, r0_CAP, r0_XH, r0_O, r0_OXHOOK, r0_SB, r0_HOOK, r0_AHOOK, r0_SHOOK, r0_SMOOTH, r0_SMALLSMOOTH, r0_STROKE, r0_DOTSIZE, r0_BARPOS, r0_GBARPOS, r0_LONGSERIF, r0_ACCENT, r0_XO, r0_CAPO, r0_HALFSTROKE, r0_RIGHTSB, r0_MIDDLE, r0_CAPMIDDLE, r0_CAP_SMOOTH, r0_DOTRADIUS, r0_SMOOTHA, r0_SMOOTHB, r0_SMALLSMOOTHA, r0_SMALLSMOOTHB, r0_ITALICCORS, r0_KAPPA, r0_COKAPPA, r0_BKAPPA, r0_COBKAPPA, r0_KAPPA_HOOK, r0_KAPPA_AHOOK, r0_TAILADJX, r0_TAILADJY, r0_Ring, r0_ORing, r0_leftwardTopSerif, r0_leftwardBottomSerif, r0_rightwardTopSerif, r0_rightwardBottomSerif, r0_xn$createglyph$7Hrq, r0_para, _r0_t0, _r0_t1, _r0_t2, _r0_t3, _r0_t4, _r0_t5, _r0_t6, _r0_t7, _r0_t8, _r0_t9, _r0_t10, _r0_t11, _r0_t12, _r0_t13, _r0_t14, _r0_t15, _r0_t16, _r0_t17, _r0_t18, _r0_t19, _r0_t20, _r0_t21, _r0_t22, _r0_t23, _r0_t24, _r0_t25, _r0_t26, _r0_t27, _r0_t28, _r0_t29, _r0_t30, _r0_t31, _r0_t32, _r0_t33, _r0_t34, _r0_t35, _r0_t36, _r0_t37, _r0_t38, _r0_t39, _r0_t40, _r0_t41, _r0_t42, _r0_t43, _r0_t44, _r0_t45, _r0_t46, _r0_t47, _r0_t48, _r0_t49, _r0_t50, _r0_t51, _r0_t52, _r0_t53, _r0_t54, _r0_t55, _r0_t56, _r0_t57, _r0_t58, _r0_t59, _r0_t60, _r0_t61, _r0_t62, _r0_t63, _r0_t64, _r0_t65, _r0_t66, _r0_t67, _r0_t68, _r0_t69; + var r0_font, r0_glyphList, r0_glyphs, r0_Glyph, r0_Stroke, r0_para_regular, r0_para_bold, r0_para_italic, r0_para_bolditalic, r0_variantSelector, r0_globalTransform, r0_ITALICCOR, r0_UPWARD, r0_DOWNWARD, r0_RIGHTWARD, r0_LEFTWARD, r0_DESCENDER, r0_WIDTH, r0_CAP, r0_XH, r0_O, r0_OXHOOK, r0_SB, r0_HOOK, r0_AHOOK, r0_SHOOK, r0_SMOOTH, r0_SMALLSMOOTH, r0_STROKE, r0_DOTSIZE, r0_BARPOS, r0_GBARPOS, r0_LONGSERIF, r0_ACCENT, r0_XO, r0_CAPO, r0_HALFSTROKE, r0_RIGHTSB, r0_MIDDLE, r0_CAPMIDDLE, r0_CAP_SMOOTH, r0_DOTRADIUS, r0_SMOOTHA, r0_SMOOTHB, r0_SMALLSMOOTHA, r0_SMALLSMOOTHB, r0_ITALICCORS, r0_KAPPA, r0_COKAPPA, r0_BKAPPA, r0_COBKAPPA, r0_KAPPA_HOOK, r0_KAPPA_AHOOK, r0_TAILADJX, r0_TAILADJY, r0_TAILADJKAPPA, r0_Ring, r0_ORing, r0_leftwardTopSerif, r0_leftwardBottomSerif, r0_rightwardTopSerif, r0_rightwardBottomSerif, r0_xn$createglyph$7Hrq, r0_para, _r0_t0, _r0_t1, _r0_t2, _r0_t3, _r0_t4, _r0_t5, _r0_t6, _r0_t7, _r0_t8, _r0_t9, _r0_t10, _r0_t11, _r0_t12, _r0_t13, _r0_t14, _r0_t15, _r0_t16, _r0_t17, _r0_t18, _r0_t19, _r0_t20, _r0_t21, _r0_t22, _r0_t23, _r0_t24, _r0_t25, _r0_t26, _r0_t27, _r0_t28, _r0_t29, _r0_t30, _r0_t31, _r0_t32, _r0_t33, _r0_t34, _r0_t35, _r0_t36, _r0_t37, _r0_t38, _r0_t39, _r0_t40, _r0_t41, _r0_t42, _r0_t43, _r0_t44, _r0_t45, _r0_t46, _r0_t47, _r0_t48, _r0_t49, _r0_t50, _r0_t51, _r0_t52, _r0_t53, _r0_t54, _r0_t55, _r0_t56, _r0_t57, _r0_t58, _r0_t59, _r0_t60, _r0_t61, _r0_t62, _r0_t63, _r0_t64, _r0_t65, _r0_t66, _r0_t67, _r0_t68, _r0_t69; r0_font = require('./empty.json'); r0_glyphList = r0_font['glyf']; r0_glyphs = { '.notdef': r0_glyphList[0] }; @@ -29,7 +29,7 @@ 'accent': 175 }; r0_para_bold = Object['create'](r0_para_regular); - r0_para_bold['stroke'] = 120; + r0_para_bold['stroke'] = 114; r0_para_bold['dotsize'] = 150; r0_para_bold['barpos'] = 0.42; r0_para_bold['hook'] = 150; @@ -41,7 +41,7 @@ r0_para_italic['italicangle'] = 10; r0_para_bolditalic = Object['create'](r0_para_bold); r0_para_bolditalic['italicangle'] = 10; - r0_para = r0_para_italic; + r0_para = r0_para_bolditalic; r0_variantSelector = { 'zero': 'slashed' }; r0_globalTransform = { 'xx': 1, @@ -51,12 +51,13 @@ 'x': 0, 'y': 0 }; + r0_ITALICCOR = 1 / Math['sqrt'](1 - r0_globalTransform['yx'] * r0_globalTransform['yx']); r0_UPWARD = { - 'x': -1, + 'x': -r0_ITALICCOR, 'y': 0 }; r0_DOWNWARD = { - 'x': 1, + 'x': r0_ITALICCOR, 'y': 0 }; r0_RIGHTWARD = { @@ -105,7 +106,8 @@ r0_KAPPA_HOOK = r0_para['kappa_hook'] || 0.7; r0_KAPPA_AHOOK = r0_para['kappa_ahook'] || r0_KAPPA_HOOK; r0_TAILADJX = r0_WIDTH * 0.2; - r0_TAILADJY = r0_XH * 0.5; + r0_TAILADJY = r0_XH * 0.25; + r0_TAILADJKAPPA = 0.75; r0_Stroke['bindParameters'](r0_para); r0_Ring = function _r0_t0(r1_u, r1_d, r1_l, r1_r) { var r1_u, r1_d, r1_l, r1_r, r1_my, r1_mx, r1_s; @@ -1077,7 +1079,7 @@ r91_xn$setwidth$9Jrj(r0_WIDTH); r91_xn$assignunicode$7Hrq('c'); r91_outline = r91_xn$createstroke$7Hrq(); - r91_outline['start-from'](r0_RIGHTSB - r0_OXHOOK, r0_XH - r0_HOOK)['curve-to'](r0_MIDDLE + r0_KAPPA_HOOK * (r0_MIDDLE - r0_para['sb']), r0_XO, r0_MIDDLE, r0_XO)['pen-direction'](r0_LEFTWARD)['arc-hv-to'](r0_SB + r0_O, r0_XH - r0_SMALLSMOOTHA)['line-to'](r0_SB + r0_O, r0_SMALLSMOOTHB)['arc-vh-to'](r0_MIDDLE, r0_O)['pen-direction'](r0_RIGHTWARD)['curve-to'](r0_MIDDLE + r0_KAPPA_HOOK * (r0_MIDDLE - r0_SB), r0_O, r0_RIGHTSB - r0_OXHOOK + r0_TAILADJX * r0_globalTransform['yx'], r0_HOOK - r0_TAILADJY * r0_globalTransform['yx']); + r91_outline['start-from'](r0_RIGHTSB - r0_OXHOOK, r0_XH - r0_HOOK)['curve-to'](r0_MIDDLE + r0_KAPPA_HOOK * (r0_MIDDLE - r0_para['sb']), r0_XO, r0_MIDDLE, r0_XO)['pen-direction'](r0_LEFTWARD)['arc-hv-to'](r0_SB + r0_O, r0_XH - r0_SMALLSMOOTHA)['line-to'](r0_SB + r0_O, r0_SMALLSMOOTHB)['arc-vh-to'](r0_MIDDLE, r0_O)['pen-direction'](r0_RIGHTWARD)['curve-to'](r0_MIDDLE + (r0_KAPPA_HOOK + r0_TAILADJKAPPA * r0_globalTransform['yx']) * (r0_MIDDLE - r0_SB), r0_O, r0_RIGHTSB - r0_OXHOOK + r0_TAILADJX * r0_globalTransform['yx'], r0_HOOK - r0_TAILADJY * r0_globalTransform['yx']); r91_xn$putshapes$9Jrj(r91_outline['form-stroke'](r0_STROKE, 0)); return void 0; }); @@ -1099,7 +1101,7 @@ r93_xn$setwidth$9Jrj(r0_WIDTH); r93_xn$assignunicode$7Hrq('e'); r93_barbottom = r0_XH * r0_BARPOS; - r93_outline = r93_xn$createstroke$7Hrq()['start-from'](r0_RIGHTSB - r0_O, r93_barbottom)['pen-direction'](r0_UPWARD)['set-width'](r0_STROKE, 0)['line-to'](r0_RIGHTSB - r0_O, r0_XH - r0_SMALLSMOOTHB)['arc-vh-to'](r0_MIDDLE, r0_XO)['pen-direction'](r0_LEFTWARD)['arc-hv-to'](r0_SB + r0_O, r0_XH - r0_SMALLSMOOTHA)['line-to'](r0_SB + r0_O, r0_SMALLSMOOTHB)['arc-vh-to'](r0_MIDDLE, r0_O)['pen-direction'](r0_RIGHTWARD)['curve-to'](r0_MIDDLE + r0_KAPPA_HOOK * (r0_MIDDLE - r0_SB), r0_O, r0_RIGHTSB - r0_OXHOOK + r0_TAILADJX * r0_globalTransform['yx'], r0_HOOK - r0_TAILADJY * r0_globalTransform['yx']); + r93_outline = r93_xn$createstroke$7Hrq()['start-from'](r0_RIGHTSB - r0_O, r93_barbottom)['pen-direction'](r0_UPWARD)['set-width'](r0_STROKE, 0)['line-to'](r0_RIGHTSB - r0_O, r0_XH - r0_SMALLSMOOTHB)['arc-vh-to'](r0_MIDDLE, r0_XO)['pen-direction'](r0_LEFTWARD)['arc-hv-to'](r0_SB + r0_O, r0_XH - r0_SMALLSMOOTHA)['line-to'](r0_SB + r0_O, r0_SMALLSMOOTHB)['arc-vh-to'](r0_MIDDLE, r0_O)['pen-direction'](r0_RIGHTWARD)['curve-to'](r0_MIDDLE + (r0_KAPPA_HOOK + r0_TAILADJKAPPA * r0_globalTransform['yx']) * (r0_MIDDLE - r0_SB), r0_O, r0_RIGHTSB - r0_OXHOOK + r0_TAILADJX * r0_globalTransform['yx'], r0_HOOK - r0_TAILADJY * r0_globalTransform['yx']); r93_bar = r93_xn$createstroke$7Hrq()['start-from'](r0_SB + r0_HALFSTROKE, r93_barbottom)['set-width'](r0_STROKE, 0)['pen-direction'](r0_RIGHTWARD)['line-to'](r0_RIGHTSB - r0_HALFSTROKE, r93_barbottom)['pen-direction'](r0_RIGHTWARD); r93_xn$putshapes$9Jrj(r93_outline['form-stroke']()); r93_xn$putshapes$9Jrj(r93_bar['form-stroke']()); @@ -1189,7 +1191,7 @@ r101_xn$setwidth$9Jrj(r0_WIDTH); r101_xn$assignunicode$7Hrq('u'); r101_xn$putshapes$9Jrj(r101_xn$createstroke$7Hrq()['start-from'](r0_SB, r0_XH)['pen-direction'](r0_DOWNWARD)['set-width'](r0_STROKE, 0)['line-to'](r0_SB, r0_SMALLSMOOTHA)['arc-vh-to'](r0_MIDDLE, r0_O)['pen-direction'](r0_RIGHTWARD)['form-stroke']()); - r101_xn$putshapes$9Jrj(r101_xn$createstroke$7Hrq()['start-from'](r0_MIDDLE, r0_O + r0_STROKE)['set-width'](0, r0_STROKE)['pen-direction'](r0_RIGHTWARD)['arc-hv-to'](r0_RIGHTSB - r0_STROKE, r0_SMALLSMOOTHA)['pen-direction'](r0_UPWARD)['set-width'](0, r0_STROKE * 0.4)['form-stroke']()); + r101_xn$putshapes$9Jrj(r101_xn$createstroke$7Hrq()['start-from'](r0_MIDDLE, r0_O + r0_STROKE)['set-width'](0, r0_STROKE)['pen-direction'](r0_RIGHTWARD)['arc-hv-to'](r0_RIGHTSB - r0_STROKE * r0_ITALICCOR, r0_SMALLSMOOTHA)['pen-direction'](r0_UPWARD)['set-width'](0, r0_STROKE * 0.4)['form-stroke']()); r101_xn$putshapes$9Jrj(r101_xn$createstroke$7Hrq()['start-from'](r0_RIGHTSB, 0)['pen-direction'](r0_UPWARD)['set-width'](r0_STROKE, 0)['line-to'](r0_RIGHTSB, r0_XH)['pen-direction'](r0_UPWARD)['form-stroke']()); return void 0; }); @@ -1209,7 +1211,7 @@ _r103_t0['gizmo'] = r0_globalTransform; _r103_t0['set-width'](r0_WIDTH); r103_xn$putshapes$9Jrj(r103_xn$createstroke$7Hrq()['start-from'](r0_RIGHTSB, 0)['pen-direction'](r0_UPWARD)['set-width'](r0_STROKE, 0)['line-to'](r0_RIGHTSB, r0_XH - r0_SMALLSMOOTHB)['arc-vh-to'](r0_MIDDLE, r0_XO)['pen-direction'](r0_LEFTWARD)['form-stroke']()); - r103_xn$putshapes$9Jrj(r103_xn$createstroke$7Hrq()['start-from'](r0_MIDDLE, r0_XO - r0_STROKE)['set-width'](0, r0_STROKE)['pen-direction'](r0_LEFTWARD)['arc-hv-to'](r0_SB + r0_STROKE, r0_XH - r0_SMALLSMOOTHA)['pen-direction'](r0_DOWNWARD)['set-width'](0, r0_STROKE * 0.4)['form-stroke']()); + r103_xn$putshapes$9Jrj(r103_xn$createstroke$7Hrq()['start-from'](r0_MIDDLE, r0_XO - r0_STROKE)['set-width'](0, r0_STROKE)['pen-direction'](r0_LEFTWARD)['arc-hv-to'](r0_SB + r0_STROKE * r0_ITALICCOR, r0_XH - r0_SMALLSMOOTHA)['pen-direction'](r0_DOWNWARD)['set-width'](0, r0_STROKE * 0.4)['form-stroke']()); return void 0; }); r0_xn$createglyph$7Hrq('n', function _r0_t53() { diff --git a/font.patel b/font.patel index 2599f8f..26f35e8 100644 --- a/font.patel +++ b/font.patel @@ -31,7 +31,7 @@ define para_regular ( ) define para_bold : Object.create para_regular -para_bold.stroke = 120 +para_bold.stroke = 114 para_bold.dotsize = 150 para_bold.barpos = 0.42 para_bold.hook = 150 @@ -46,7 +46,7 @@ para_italic.italicangle = 10 define para_bolditalic : Object.create para_bold para_bolditalic.italicangle = 10 -para = para_italic +para = para_bolditalic define variantSelector ( .zero 'slashed' @@ -61,8 +61,10 @@ define globalTransform ( .y 0 ) -define UPWARD (.x [-1] .y 0) -define DOWNWARD (.x 1 .y 0) +define ITALICCOR : 1 / [Math.sqrt [1 - globalTransform.yx * globalTransform.yx]] + +define UPWARD (.x [-ITALICCOR] .y 0) +define DOWNWARD (.x ITALICCOR .y 0) define RIGHTWARD (.x globalTransform.yx .y 1) define LEFTWARD (.x [- globalTransform.yx] .y [-1]) @@ -111,7 +113,8 @@ define COBKAPPA : 1 - BKAPPA define KAPPA_HOOK : para.kappa_hook || 0.7 define KAPPA_AHOOK : para.kappa_ahook || KAPPA_HOOK define TAILADJX : WIDTH * 0.2 -define TAILADJY : XH * 0.5 +define TAILADJY : XH * 0.25 +define TAILADJKAPPA 0.75 Stroke.bindParameters para @@ -923,7 +926,7 @@ create-glyph 'c' : glyph-construction { :.line-to [SB + O] SMALLSMOOTHB :.arc-vh-to MIDDLE O :.pen-direction RIGHTWARD - :.curve-to [MIDDLE + KAPPA_HOOK * [MIDDLE - SB]] O [RIGHTSB - OXHOOK + TAILADJX * globalTransform.yx] [HOOK - TAILADJY * globalTransform.yx] + :.curve-to [MIDDLE + [KAPPA_HOOK + TAILADJKAPPA * globalTransform.yx] * [MIDDLE - SB]] O [RIGHTSB - OXHOOK + TAILADJX * globalTransform.yx] [HOOK - TAILADJY * globalTransform.yx] put-shapes : outline.form-stroke STROKE 0 } create-glyph 'e' : glyph-construction { @@ -943,7 +946,7 @@ create-glyph 'e' : glyph-construction { :.line-to [SB + O] SMALLSMOOTHB :.arc-vh-to MIDDLE O :.pen-direction RIGHTWARD - :.curve-to [MIDDLE + KAPPA_HOOK * [MIDDLE - SB]] O [RIGHTSB - OXHOOK + TAILADJX * globalTransform.yx] [HOOK - TAILADJY * globalTransform.yx] + :.curve-to [MIDDLE + [KAPPA_HOOK + TAILADJKAPPA * globalTransform.yx] * [MIDDLE - SB]] O [RIGHTSB - OXHOOK + TAILADJX * globalTransform.yx] [HOOK - TAILADJY * globalTransform.yx] local bar : create-stroke :.start-from [SB + HALFSTROKE] barbottom @@ -1022,7 +1025,7 @@ create-glyph 'u' : glyph-construction { :.start-from MIDDLE [O + STROKE] :.set-width 0 STROKE :.pen-direction RIGHTWARD - :.arc-hv-to [RIGHTSB - STROKE] SMALLSMOOTHA + :.arc-hv-to [RIGHTSB - STROKE * ITALICCOR] SMALLSMOOTHA :.pen-direction UPWARD :.set-width 0 [STROKE * 0.4] :.form-stroke @@ -1049,7 +1052,7 @@ create-glyph 'nbowl' : glyph-construction { :.start-from MIDDLE [XO - STROKE] :.set-width 0 STROKE :.pen-direction LEFTWARD - :.arc-hv-to [SB + STROKE] [XH - SMALLSMOOTHA] + :.arc-hv-to [SB + STROKE * ITALICCOR] [XH - SMALLSMOOTHA] :.pen-direction DOWNWARD :.set-width 0 [STROKE * 0.4] :.form-stroke diff --git a/support/stroke.js b/support/stroke.js index 9295c18..8c80d4d 100644 --- a/support/stroke.js +++ b/support/stroke.js @@ -1,5 +1,5 @@ { - var r0_smooth, r0_intersection, r0_Bezier, r0_tp, r0_utp, r0_xn$xsarray$3cah, r0_xn$ysarray$3cah, r0_SAMPLES, r0_TINY, r0_LITTLE, r0_KAPPA, r0_COKAPPA, r0_BKAPPA, r0_COBKAPPA, r0_Stroke, r0_dforward, r0_dbackward, r0_nonlinear, r0_computeOffsetPoint, _r0_t0, _r0_t1, _r0_t2, _r0_t3, _r0_t4, _r0_t5, _r0_t6, _r0_t7, _r0_t8, _r0_t9, _r0_t10, _r0_t11, _r0_t12, _r0_t13, _r0_t14, _r0_t15, _r0_t16, _r0_t17; + var r0_smooth, r0_intersection, r0_Bezier, r0_tp, r0_utp, r0_xn$xsarray$3cah, r0_xn$ysarray$3cah, r0_SAMPLES, r0_TINY, r0_LITTLE, r0_CUTOFF, r0_KAPPA, r0_COKAPPA, r0_BKAPPA, r0_COBKAPPA, r0_Stroke, r0_dforward, r0_dbackward, r0_nonlinear, r0_computeOffsetPoint, _r0_t0, _r0_t1, _r0_t2, _r0_t3, _r0_t4, _r0_t5, _r0_t6, _r0_t7, _r0_t8, _r0_t9, _r0_t10, _r0_t11, _r0_t12, _r0_t13, _r0_t14, _r0_t15, _r0_t16, _r0_t17; r0_smooth = require('./monotonic-interpolate')['createInterpolant']; r0_intersection = require('./intersection')['intersection']; r0_Bezier = require('bezier-js'); @@ -18,9 +18,10 @@ var r2_a; return [r2_a[0]]['concat'](r2_a['concat']([r2_a[r2_a['length'] - 1]])); }; - r0_SAMPLES = 4; + r0_SAMPLES = 5; r0_TINY = 0.0001; r0_LITTLE = 0.01; + r0_CUTOFF = 10000; r0_KAPPA = 0.51; r0_COKAPPA = 1 - r0_KAPPA; r0_BKAPPA = r0_KAPPA + 0.1; @@ -347,8 +348,7 @@ r18_dlnext = r0_dbackward(r18_lnext, r18_lnnext1, r18_lnnext2, r18_lnnext3); r18_drnext = r0_dbackward(r18_rnext, r18_rnnext2, r18_rnnext2, r18_rnnext3); r18_il = r0_intersection(r18_lthis['x'], r18_lthis['y'], r18_dlthis['x'], r18_dlthis['y'], r18_lnext['x'], r18_lnext['y'], r18_dlnext['x'], r18_dlnext['y']); - r18_ir = r0_intersection(r18_rthis['x'], r18_rthis['y'], r18_drthis['x'], r18_drthis['y'], r18_rnext['x'], r18_rnext['y'], r18_drnext['x'], r18_drnext['y']); - if (r18_il['x'] !== null && r18_il['y'] !== null && r0_nonlinear(r18_lthis, r18_il, r18_lnext)) { + if (r0_nonlinear(r18_lthis, r18_lnext, r18_dlthis) && r0_nonlinear(r18_lthis, r18_lnext, r18_dlnext) && r18_il['x'] !== null && r18_il['y'] !== null && Math['abs'](r18_il['x']) <= r0_CUTOFF && Math['abs'](r18_il['y']) <= r0_CUTOFF && r0_nonlinear(r18_lthis, r18_il, r18_lnext)) { r18_left['push']({ 'x': r18_lthis['x'], 'y': r18_lthis['y'], @@ -365,7 +365,8 @@ 'onCurve': true }); } - if (r18_ir['x'] !== null && r18_ir['y'] !== null && r0_nonlinear(r18_rthis, r18_ir, r18_rnext)) { + r18_ir = r0_intersection(r18_rthis['x'], r18_rthis['y'], r18_drthis['x'], r18_drthis['y'], r18_rnext['x'], r18_rnext['y'], r18_drnext['x'], r18_drnext['y']); + if (r0_nonlinear(r18_rthis, r18_rnext, r18_drthis) && r0_nonlinear(r18_rthis, r18_rnext, r18_drnext) && r18_ir['x'] !== null && r18_ir['y'] !== null && Math['abs'](r18_ir['x']) <= r0_CUTOFF && Math['abs'](r18_ir['y']) <= r0_CUTOFF && r0_nonlinear(r18_rthis, r18_ir, r18_rnext)) { r18_right['push']({ 'x': r18_rthis['x'], 'y': r18_rthis['y'], diff --git a/support/stroke.patel b/support/stroke.patel index 1580f15..1c60398 100644 --- a/support/stroke.patel +++ b/support/stroke.patel @@ -11,9 +11,10 @@ define [xs-array low high] : begin { } define [ys-array a] (a.0 :: [a.concat (a`[a.length - 1])]) -define SAMPLES 4 +define SAMPLES 5 define TINY 0.0001 define LITTLE 0.01 +define CUTOFF 10000 define KAPPA 0.51 define COKAPPA : 1 - KAPPA define BKAPPA : KAPPA + 0.1 @@ -186,15 +187,14 @@ define [Stroke.prototype.form-stroke d1 d2] : begin { local drnext [dbackward rnext rnnext2 rnnext2 rnnext3] local il : intersection lthis.x lthis.y dlthis.x dlthis.y lnext.x lnext.y dlnext.x dlnext.y - local ir : intersection rthis.x rthis.y drthis.x drthis.y rnext.x rnext.y drnext.x drnext.y - - if [[il.x != null] && [il.y != null] && [nonlinear lthis il lnext]] [then { + if [[nonlinear lthis lnext dlthis] && [nonlinear lthis lnext dlnext] && [il.x != null] && [il.y != null] && [Math.abs il.x] <= CUTOFF && [Math.abs il.y] <= CUTOFF && [nonlinear lthis il lnext]] [then { left.push (.x lthis.x .y lthis.y .onCurve true) (.x il.x .y il.y .onCurve false) }] [else { left.push (.x lthis.x .y lthis.y .onCurve true) }] - if [[ir.x != null] && [ir.y != null] && [nonlinear rthis ir rnext]] [then { + local ir : intersection rthis.x rthis.y drthis.x drthis.y rnext.x rnext.y drnext.x drnext.y + if [[nonlinear rthis rnext drthis] && [nonlinear rthis rnext drnext] && [ir.x != null] && [ir.y != null] && [Math.abs ir.x] <= CUTOFF && [Math.abs ir.y] <= CUTOFF && [nonlinear rthis ir rnext]] [then { right.push (.x rthis.x .y rthis.y .onCurve true) (.x ir.x .y ir.y .onCurve false) }] [else { right.push (.x rthis.x .y rthis.y .onCurve true)