==== Text ==== Text can be used in designs to create the outline of characters, which can then be used to create either 2D or 3D shapes. //NOTE: Only the ASCII characters can be used today.// === Single Characters === A single character can be converted into an outline, i.e. an array of line segments. The character ''height'' as well as the character position can be requested by specifying options. Note: The ''height'' is the height of UPPERCASE characters. Defaults: * xOffset : 0 * yOffset : 0 * height : 21 * extrudeOffset : 0 * font : 'hershey simplex' (built in) const { vectorChar } = require('@jscad/modeling').text const outlines = vectorChar('H'); const outlines = vectorChar({ height: 50 }, 'i'); The above examples only create the outlines of the character. In order to convert to something useful, the following can be used to convert the outlines (segments) into paths. const { path2 } = require('@jscad/modeling').geometries const segmentToPath = (segment) => { return path2.fromPoints({close: false}, segment) } const paths = outlines.segments.map((segment) => segmentToPath(segment)) And of course, the paths can be used to create additional shapes, including 3D shapes of the characters. === Text Strings === In addition to single characters, complete text strings can be converted to a series of outlines, i.e. line segments. Text can be split into multiple lines by including '\n'. And of course, text can be aligned and spaced by specifying options. Defaults: * xOffset : 0 * yOffset : 0 * height : 21 * lineSpacing = 1.4 * letterSpacing = 1 * align = 'left' * extrudeOffset : 0 * font : 'hershey simplex' (built in) const { vectorText } = require('@jscad/modeling').text const outlines = vectorText('JSCAD'); const outlines = vectorText({ yOffset: -90, height: 10, extrudeOffset: 2, input: 'JSCAD is awesome!' }); const outlines = vectorText({ height: 25, align: 'right', lineSpacing: 2.2, extrudeOffset: 2 }, 'JSCAD\nRocks!!'); Again, you will have to convert the output of `vectorText` into a list of paths before it becomes actually useful: const { path2 } = require('@jscad/modeling').geometries const segmentToPath = (segment) => { return path2.fromPoints({close: false}, segment) } const paths = outlines.map((segment) => segmentToPath(segment)) === Using Other Fonts === The default font ([[http://paulbourke.net/dataformats/hershey/|hershey simplex]]) was provided from the [[https://github.com/lautr3k/jscad-vector-fonts | JSCAD Vector Font project]]. This project includes several 'compiled' fonts that can be used immediately, as well as a utility to convert singe-line fonts. Once the custom 'compiled' font is availabe, here are the steps to use it. - Create a new project - Copy the custom 'compiled' font into the project - Require the custom font inside the project design - Specify the 'font' in the options to vectorChar() or vectorText() const { path2 } = require('@jscad/modeling').geometries const { vectorText } = require('@jscad/modeling').text const myfont = require('./fonts/vector/cncVector') // CUSTOM FONT const segmentToPath = (segment) => { return path2.fromPoints({close: false}, segment) } const main = () => { const outlines = vectorText({height: 42, align: 'right', font: myfont}, 'JSCAD\nROCKS!!') const paths = outlines.map((segment) => segmentToPath(segment)) return paths } module.exports = {main} **//Special Note: These fonts are 'single-line' fonts, NOT TrueType fonts. There are libraries that create outlines from TrueType (and other) fonts.//**