p5.Font · contours · counters
Font Outlines
O8, twice: hatch and cross-hatch. Counters remain open. Below the rule, text gives way to asemic marks.
Core snippet
// An outline font supplies real letter bodies.
const plot = new GysinPlot({ seed: 8088 });
const font = await loadFont(FONT_URL); // Oswald or Anton
plot.text("O8", 64, 190, { font }); // an outline font -> real letter bodies
plot.draw();
// The same glyphs, two fills; counters stay hollow.
plot.text("O8", 64, 190, { font, fill: "hatch", hatchAngle: 22 });
plot.text("O8", 384, 190, { font, fill: "cross", hatchAngle: 22 + 23 });
// A phrase crosses a hand-inked rule.
plot.textCutup("COUNTER MEMORY", 72, 404, { font, slices: 4, drift: 1.2 });
plot.line(72, 428, 588, 428, { repeat: 2, overshoot: 8 });
// Past the rule, asemic marks.
for (let i = 0; i < 8; i++) plot.asemic(72 + i * 64, 478, 64, 66, { loops: 3 });
plot.draw();
Fill opens or closes the bodies; Font changes their counters. The three sliders set breathe, weave spacing and angle. New variation changes the seed; SVG and HPGL export the current pen lines.
Loading outline font…
Red arrow: the counter inside the O. The status line reports seed, font, spacing, angle and pen-line count.