Concepts and Data Flow
Outlines and strokes are different
The paths in an outline font describe the outer contours and holes of characters. They indicate where to fill, not in what order to move a pen.
This library therefore distinguishes two types of data:
FontOutlineGlyph,FontFilledGlyph, andFontCenterlineGlyph: data obtained by geometric processing of outline fonts.FontStrokeGlyph: stroke data that preserves stroke order and pen-down/pen-up units.
The centerline-extraction route prioritizes applicability to arbitrary fonts, whereas the KanjiVG route prioritizes natural stroke segmentation and stroke order for kanji.
Intermediate representations
FontOutlineGlyph
A collection of outline paths for one character or a string. Points are scaled to the specified character height. For multiple characters, the paths are placed along the X axis using the font’s advance width and the specified spacing.
FontFilledGlyph
A binary mask obtained by projecting outlines onto a grid at a fixed spacing. Multiple outlines are combined using XOR, allowing outer contours and inner holes to be distinguished.
FontCenterlineGlyph
A collection of centerline paths obtained by skeletonizing the binary mask and tracing it as an 8-connected graph. Paths are split at branch points and endpoints.
FontStrokeGlyph
A collection of ordered stroke paths. The path order is the writing order, and each FontStrokePath represents one continuous pen-down stroke.
Separation of responsibilities
Stage |
Class |
Main responsibility |
|---|---|---|
Outline extraction |
|
Convert font instructions into point sequences and scale to the specified height |
Filling |
|
Convert outlines into a binary grid |
Centerline extraction |
|
Skeletonization and path tracing |
Centerline cleanup |
|
Remove short paths and duplicate points; resample paths |
Kanji strokes |
|
Preserve KanjiVG stroke order when producing point sequences |
Alphabet strokes |
|
Generate point sequences from built-in single-line characters |
Visualization |
|
Visually inspect intermediate representations |
Physical writing |
|
Convert to absolute P coordinates and operate COBOTTA |
Principles of robotic writing
COBOTTA distinguishes motion within a stroke from motion between strokes:
Move to the start of a stroke with the pen raised.
Lower the pen to the writing surface at the start point.
Submit consecutive points within the stroke at the same Z coordinate.
Raise the pen at the end of the stroke.
Move to the start of the next stroke.
Robot targets are absolute P coordinates referenced to the initial writing pose, not relative movements. The orientation components remain those of the initial pose; only XYZ is transformed from character coordinates.