Loading

Spiff.scad

by stuartpb, published

Spiff.scad by stuartpb Jun 20, 2013

Featured Thing!

Description

An OpenSCAD module for writing variable-width text. Download [Spiff.scad](http://www.thingiverse.com/download:225333) and [spiffsans.scad](http://www.thingiverse.com/download:225332), then see the Instructions for how to use this in your own works (or use [poorman-spiff](https://github.com/stuartpb/poorman-spiff) to generate a copy-pasteable demo).

[Spiff.scad on GitHub](https://github.com/stuartpb/Spiff.scad)

## Requirements

Spiff.scad requires at least OpenSCAD 2013.06, as it uses [module recursion][1] to calculate variable glyph widths.

[1]: github.com/openscad/openscad/blob/openscad-2013.06/RELEASE_NOTES

If you're stuck on an older version of OpenSCAD, you can still generate the equivalent code for writing text using [poorman-spiff](https://github.com/stuartpb/poorman-spiff).

Due to OpenSCAD's recursion limit, you may encounter problems writing longer strings. If this happens, try breaking your write call up into multiple calls with shorter strings.

---

Note that, while this is listed as a derivative of Write.scad, it is not derivative code, and is almost completely incompatible (they're almost compatible in the sense that they both write text, but that's it).

Recent Comments

view all
Both "a" and "A" are displayed as "A". The data for both capital and lower case glyph of every letter are the same. It seems that this package only draws capital fonts :(
I thought about that. What I ultimately figured was that the functionality of write_cylinder would be better served by something like a general cylindrical transformation module, or a Minkowski sum, or the intersection of a long linear extrusion with a cylinder. (I don't know how to do a cylindrical transformation myself, though.)
Awesome, I can't wait to try this! On a feature request note, the one fancy function in Write.scad that I actually used a lot was WriteCylinder. It's vastly more convenient than placing each letter individually (especially with variable-width). If you could implement something like that, it would be spectacular.

Liked By

view all

License

Give a Shout Out

If you print this Thing and display it in public proudly give attribution by printing and displaying this tag. Print Thing Tag

Instructions

## Usage
### write(string,font,spacing=1)

Draws a group of 2D polygons for the given string, using the given font (see section on Fonts, below). Glyphs are spaced apart by the value of the third "spacing" parameter (1 unit by default). By default, if no font is specified, [Spiff Sans](https://github.com/stuartpb/spiffsans) will be used. (spiffsans.scad should be included in the same directory as Spiff.scad.)

These 2D polygons can be transformed in 3D space using the regular OpenSCAD transformations in combination with [linear_extrude][].

[linear_extrude]: en.wikibooks.org/wiki/OpenSCAD_User_Manual/Using_the_2D_Subsystem#2D_to_3D_Extrusion

### Example

use ;

write("Variable width text");

translate([0,-12,0]) linear_extrude(height=4)
write("Simple as anystring");

See [spiff-examples][] for more examples of Spiff.scad in use.

[spiff-examples]: github.com/stuartpb/spiff-examples

## Fonts

See [the readme on GitHub](https://github.com/stuartpb/Spiff.scad#readme) for documentation of the font structure used by Spiff.scad.

Converters for various font formats to this font representation are being developed at github.com/stuartpb/spaggers .
Both "a" and "A" are displayed as "A". The data for both capital and lower case glyph of every letter are the same. It seems that this package only draws capital fonts :(
Awesome, I can't wait to try this! On a feature request note, the one fancy function in Write.scad that I actually used a lot was WriteCylinder. It's vastly more convenient than placing each letter individually (especially with variable-width). If you could implement something like that, it would be spectacular.
I thought about that. What I ultimately figured was that the functionality of write_cylinder would be better served by something like a general cylindrical transformation module, or a Minkowski sum, or the intersection of a long linear extrusion with a cylinder. (I don't know how to do a cylindrical transformation myself, though.)
Top