139 lines
No EOL
4.5 KiB
Text
139 lines
No EOL
4.5 KiB
Text
|
|
### COMMON SHAPES
|
|
|
|
define [Ring u d l r] : begin {
|
|
local my [[u + d] / 2]
|
|
local mx [[l + r] / 2]
|
|
local s : new Stroke
|
|
:.set-transform globalTransform
|
|
:.start-from mx d
|
|
:.cubic-to [mx + [l - mx] * BKAPPA] d l [my + [d - my] * BKAPPA] l my
|
|
:.cubic-to l [my + [u - my] * BKAPPA] [mx + [l - mx] * BKAPPA] u mx u
|
|
:.cubic-to [mx + [r - mx] * BKAPPA] u r [my + [u - my] * BKAPPA] r my
|
|
:.cubic-to r [my + [d - my] * BKAPPA] [mx + [r - mx] * BKAPPA] d mx d
|
|
return s.points
|
|
}
|
|
define [ORing u d l r smooth] : begin {
|
|
local myu [u - smooth]
|
|
local myd [d + smooth]
|
|
local mx [[l + r] / 2]
|
|
local s : new Stroke
|
|
:.set-transform globalTransform
|
|
:.start-from mx d
|
|
:.cubic-to [mx + [l - mx] * BKAPPA] d l [myd + [d - myd] * BKAPPA] l myd
|
|
:.line-to l myu
|
|
:.cubic-to l [myu + [u - myu] * BKAPPA] [mx + [l - mx] * BKAPPA] u mx u
|
|
:.cubic-to [mx + [r - mx] * BKAPPA] u r [myu + [u - myu] * BKAPPA] r myu
|
|
:.line-to r myd
|
|
:.cubic-to r [myd + [d - myd] * BKAPPA] [mx + [r - mx] * BKAPPA] d mx d
|
|
return s.points
|
|
}
|
|
define [leftwardTopSerif x y length] : begin {
|
|
return : new Stroke
|
|
:.set-transform globalTransform
|
|
:.start-from [x + HALFSTROKE] y
|
|
:.heads-to LEFTWARD
|
|
:.set-width STROKE 0
|
|
:.line-to [x - length - globalTransform.yx * STROKE] y
|
|
:.to-outline
|
|
}
|
|
define [leftwardBottomSerif x y length] : begin {
|
|
return : new Stroke
|
|
:.set-transform globalTransform
|
|
:.start-from [x + HALFSTROKE] y
|
|
:.heads-to LEFTWARD
|
|
:.set-width 0 STROKE
|
|
:.line-to [x - length + globalTransform.yx * STROKE] y
|
|
:.to-outline
|
|
}
|
|
define [rightwardTopSerif x y length] : begin {
|
|
return : new Stroke
|
|
:.set-transform globalTransform
|
|
:.start-from [x - HALFSTROKE] y
|
|
:.heads-to RIGHTWARD
|
|
:.set-width 0 STROKE
|
|
:.line-to [x + length - globalTransform.yx * STROKE] y
|
|
:.to-outline
|
|
}
|
|
define [rightwardBottomSerif x y length] : begin {
|
|
return : new Stroke
|
|
:.set-transform globalTransform
|
|
:.start-from [x - HALFSTROKE] y
|
|
:.heads-to RIGHTWARD
|
|
:.set-width STROKE 0
|
|
:.line-to [x + length + globalTransform.yx * STROKE] y
|
|
:.to-outline
|
|
}
|
|
|
|
define [sStrand leftlimit rightlimit _expansion _roundp] : begin {
|
|
local expansion : _expansion || 0.25
|
|
local roundsize : [SMOOTHA * [_roundp || 0.4]] * [if [leftlimit < rightlimit] [-1] 1]
|
|
local roundleft [leftlimit - roundsize]
|
|
local roundright [rightlimit + roundsize]
|
|
local sxleft [SB + HALFSTROKE + [RIGHTSB - SB - STROKE] * [0.5 - expansion]]
|
|
local sxright [WIDTH - sxleft]
|
|
local syleft [roundleft + [roundright - roundleft] * [0.5 - expansion]]
|
|
local syright [roundleft + [roundright - roundleft] * [0.5 + expansion]]
|
|
|
|
return : new Stroke
|
|
:.set-transform globalTransform
|
|
:.start-from [SB + HALFSTROKE] leftlimit
|
|
:.set-width HALFSTROKE HALFSTROKE
|
|
:.curve-to [SB + HALFSTROKE] roundleft sxleft syleft
|
|
:.line-to sxright syright
|
|
:.curve-to [RIGHTSB - HALFSTROKE] roundright [RIGHTSB - HALFSTROKE] rightlimit
|
|
:.to-outline
|
|
}
|
|
|
|
define [nBowl left middle right fine] : begin {
|
|
local bandLeft : new Stroke
|
|
:.set-transform globalTransform
|
|
:.start-from right 0
|
|
:.heads-to UPWARD
|
|
:.set-width STROKE 0
|
|
:.line-to right [XH - SMALLSMOOTHB]
|
|
:.arc-vh-to middle XO
|
|
:.heads-to LEFTWARD
|
|
:.to-outline
|
|
local bandRight : new Stroke
|
|
:.set-transform globalTransform
|
|
:.start-from middle [XO - STROKE]
|
|
:.set-width 0 STROKE
|
|
:.heads-to LEFTWARD
|
|
:.arc-hv-to left [XH - SMALLSMOOTHA]
|
|
:.heads-to DOWNWARD
|
|
:.set-width 0 fine
|
|
:.to-outline
|
|
return : bandLeft.concat bandRight
|
|
}
|
|
|
|
define [sHookUpper top smooth hook] : begin {
|
|
return : new Stroke
|
|
:.set-transform globalTransform
|
|
:.start-from [RIGHTSB - OXHOOK] [top - hook]
|
|
:.set-width STROKE 0
|
|
:.curve-to [MIDDLE + KAPPA_HOOK * [MIDDLE - para.sb]] [top - O] MIDDLE [top - O]
|
|
:.heads-to LEFTWARD
|
|
:.arc-hv-to SB [top - smooth]
|
|
:.to-outline
|
|
}
|
|
define [twoHookUpper top smooth hook] : begin {
|
|
return : new Stroke
|
|
:.set-transform globalTransform
|
|
:.start-from [SB + OXHOOK] [top - hook]
|
|
:.set-width 0 STROKE
|
|
:.curve-to [MIDDLE - KAPPA_HOOK * [MIDDLE - para.sb]] [top - O] MIDDLE [top - O]
|
|
:.heads-to RIGHTWARD
|
|
:.arc-hv-to RIGHTSB [top - smooth]
|
|
:.to-outline
|
|
}
|
|
define [sHookLower bottom smooth hook] : begin {
|
|
return : new Stroke
|
|
:.set-transform globalTransform
|
|
:.start-from RIGHTSB smooth
|
|
:.set-width 0 STROKE
|
|
:.arc-vh-to MIDDLE [bottom + O]
|
|
:.heads-to LEFTWARD
|
|
:.curve-to [MIDDLE - KAPPA_HOOK * [MIDDLE - para.sb]] [bottom + O] [SB + OXHOOK] [bottom + hook]
|
|
:.to-outline
|
|
} |