Improved outline simplification subpass.
This commit is contained in:
parent
8d8c7f4cf0
commit
1449401097
|
@ -1225,7 +1225,7 @@ symbol-block 'p'
|
|||
assign-unicode 'p'
|
||||
include pMarks
|
||||
|
||||
include : OBarLeftShape
|
||||
include : tagged 'bowl' : OBarLeftShape
|
||||
include : VBarLeft SB DESCENDER XH
|
||||
if SLAB : begin
|
||||
include : LeftwardTopSerif SB XH SIDEJUT
|
||||
|
@ -2591,7 +2591,7 @@ symbol-block 't'
|
|||
local center : MIDDLE - TBALANCE - HALFSTROKE * CORRECTION_HX
|
||||
local hookx (center + (WIDTH - SB * 2) * 0.8 - OXHOOK + TAILADJX * globalTransform.yx)
|
||||
local turn : [mix center hookx 0.5] + CORRECTION_OMIDS
|
||||
local smb : (turn - center) * 1.2
|
||||
local smb : Math.max HOOK ((turn - center) * 1.2)
|
||||
|
||||
local g : dispiro
|
||||
widths.lhs
|
||||
|
|
|
@ -205,7 +205,7 @@ symbol-block 'epsilon and cyrze'
|
|||
include : dispiro
|
||||
widths.lhs
|
||||
g4 RIGHTSB (top - [fallback hook SHOOK])
|
||||
hookstart top
|
||||
hookstart (top - O)
|
||||
g4 (SB + OXE) (top - sma)
|
||||
arcvh
|
||||
flat MIDDLE (midy - (fine - HALFSTROKE)) [widths.heading fine 0 RIGHTWARD]
|
||||
|
@ -213,7 +213,7 @@ symbol-block 'epsilon and cyrze'
|
|||
include : dispiro
|
||||
widths.rhs
|
||||
g4 RIGHTSB [fallback hook SHOOK]
|
||||
hookstart 0
|
||||
hookstart O
|
||||
g4 (SB + OXE) smb
|
||||
arcvh
|
||||
flat MIDDLE (midy + (fine - HALFSTROKE)) [widths.heading 0 fine RIGHTWARD]
|
||||
|
@ -238,7 +238,7 @@ symbol-block 'epsilon and cyrze'
|
|||
include : dispiro
|
||||
widths.rhs
|
||||
g4 SB (top - [fallback hook SHOOK])
|
||||
hookstart top
|
||||
hookstart (top - O)
|
||||
g4 (RIGHTSB - OXE) (top - smb)
|
||||
arcvh
|
||||
flat MIDDLE (midy - (fine - HALFSTROKE)) [widths.heading 0 fine LEFTWARD]
|
||||
|
@ -246,7 +246,7 @@ symbol-block 'epsilon and cyrze'
|
|||
include : dispiro
|
||||
widths.lhs
|
||||
g4 SB [fallback hook SHOOK]
|
||||
hookstart 0
|
||||
hookstart O
|
||||
g4 (RIGHTSB - OXE) sma
|
||||
arcvh
|
||||
flat MIDDLE (midy + (fine - HALFSTROKE)) [widths.heading fine 0 LEFTWARD]
|
||||
|
@ -303,7 +303,7 @@ symbol-block 'zeta and xi'
|
|||
local ybar : mix 0 CAP 0.55
|
||||
include : dispiro
|
||||
widths.rhs
|
||||
g4 xbar (CAP - STROKE)
|
||||
g4.left.start xbar (CAP - STROKE)
|
||||
archv
|
||||
g4 (SB - O * 2 + STROKE * CORRECTION_HX) [mix (CAP - STROKE) ybar 0.6]
|
||||
arcvh
|
||||
|
@ -1669,6 +1669,7 @@ symbol-block 'Thorn'
|
|||
eject-contour 'serifLB'
|
||||
include : create-glyph : glyph-construction
|
||||
include glyphs.p
|
||||
eject-contour 'bowl'
|
||||
eject-contour 'serifLT'
|
||||
include ifMarks
|
||||
|
||||
|
|
|
@ -9,11 +9,11 @@ font = fontforge.open(source)
|
|||
# Replace accented characters into references
|
||||
print " Reference finding: ", font.fontname
|
||||
font.selection.select(("ranges", "unicode", None), 0x1FCD, 0x1FCF, 0x1FDD, 0x1FDF)
|
||||
font.replaceWithReference(2)
|
||||
font.replaceWithReference(1)
|
||||
font.selection.all()
|
||||
font.selection.select(("less", None), "I.straight", "dotlessi.straight", "l.straight", "ltailBR", "rtailBR")
|
||||
font.selection.select(("less", "ranges", "unicode"), 0x207A, 0x207E, 0x208A, 0x208E)
|
||||
font.replaceWithReference(2)
|
||||
font.replaceWithReference(1)
|
||||
|
||||
# Remove overlapped area
|
||||
print " Overlap Removal: ", font.fontname
|
||||
|
@ -25,16 +25,19 @@ for i in font:
|
|||
glyph.unlinkRef()
|
||||
glyph.removeOverlap()
|
||||
font.selection.all()
|
||||
font.replaceWithReference(2)
|
||||
font.replaceWithReference(1)
|
||||
|
||||
print " Simplify: ", font.fontname
|
||||
font.selection.all()
|
||||
font.transform(psMat.scale(5))
|
||||
font.simplify(1, ("smoothcurves", "choosehv"), 0.1)
|
||||
font.simplify(0.05, ("smoothcurves", "choosehv"), 0.1)
|
||||
font.transform(psMat.scale(0.2))
|
||||
font.simplify(1, ("smoothcurves", "choosehv"), 0.1)
|
||||
font.simplify(0.2, ("smoothcurves", "choosehv"), 0.1)
|
||||
|
||||
#font.em = 2000
|
||||
font.layers["Fore"].is_quadratic = True
|
||||
font.transform(psMat.skew(float(sys.argv[3]) / 180 * math.pi))
|
||||
#font.em = 1000
|
||||
|
||||
font.canonicalContours()
|
||||
font.canonicalStart()
|
||||
|
|
|
@ -9,6 +9,8 @@ font.selection.select(("ranges", "unicode", None), 0x20, 0x7e)
|
|||
font.unlinkReferences()
|
||||
font.selection.all()
|
||||
font.removeOverlap()
|
||||
font.simplify(0.1)
|
||||
font.simplify(0.01)
|
||||
font.selection.all()
|
||||
font.removeOverlap()
|
||||
font.mergeFeature(sys.argv[2])
|
||||
font.generate(sys.argv[3], flags = ("short-post", "opentype"))
|
|
@ -104,8 +104,8 @@ export : define [SetupBuilders args] : begin
|
|||
if [not cache.(samples)] : build samples
|
||||
return cache.(samples).vh
|
||||
list hv vh
|
||||
define [archv samples notiny k raf] : alsothruthem [jhv [fallback samples 4]] raf
|
||||
define [arcvh samples notiny k raf] : alsothruthem [jvh [fallback samples 4]] raf
|
||||
define [archv samples notiny k raf] : alsothruthem [jhv [fallback samples 12]] raf
|
||||
define [arcvh samples notiny k raf] : alsothruthem [jvh [fallback samples 12]] raf
|
||||
|
||||
define [complexThru] : begin
|
||||
local a : {}.slice.call arguments
|
||||
|
@ -136,7 +136,8 @@ export : define [SetupBuilders args] : begin
|
|||
set knots.(j) : knots.(j).af.call s knots.(j - 1) knots.(j + 1) knots.(j)
|
||||
if closed : knots.pop
|
||||
return {.knots [flatten knots] .closed closed .lastafs lastafs}
|
||||
|
||||
|
||||
define QUAD false
|
||||
define [dispiro] : begin
|
||||
local s : new SpiroExpansionContext
|
||||
set s.gizmo globalTransform
|
||||
|
@ -151,16 +152,16 @@ export : define [SetupBuilders args] : begin
|
|||
local {.lhs lhs .rhs rhs} : s.expand [fallback s.contrast CONTRAST]
|
||||
if closed : then
|
||||
local g : new Glyph
|
||||
libspiro.spiroToBezierOnContext [lhs.slice 0 (-1)] true g
|
||||
libspiro.spiroToBezierOnContext [lhs.slice 0 (-1)] true g QUAD 0.5
|
||||
local lhsContour g.contours.0
|
||||
set g.contours {}
|
||||
libspiro.spiroToBezierOnContext [rhs.reverse :.slice 0 (-1)] true g
|
||||
libspiro.spiroToBezierOnContext [rhs.reverse :.slice 0 (-1)] true g QUAD 0.5
|
||||
local rhsContour g.contours.0
|
||||
set g.contours {[lhsContour.concat rhsContour]}
|
||||
: else
|
||||
local g : new Glyph
|
||||
lhs.0.type = rhs.0.type = lhs.(lhs.length - 1).type = rhs.(rhs.length - 1).type = 'corner'
|
||||
libspiro.spiroToBezierOnContext [lhs.concat : rhs.reverse] true g
|
||||
libspiro.spiroToBezierOnContext [lhs.concat : rhs.reverse] true g QUAD 0.5
|
||||
set g.knots knots
|
||||
set g.lhsknots lhs
|
||||
set g.rhsknots rhs
|
||||
|
|
Loading…
Reference in New Issue
Block a user