Skip to content

Instantly share code, notes, and snippets.

@jepler
Created December 30, 2023 21:34
Show Gist options
  • Save jepler/a6d5418dda01871f9d12d493c349bc6b to your computer and use it in GitHub Desktop.
Save jepler/a6d5418dda01871f9d12d493c349bc6b to your computer and use it in GitHub Desktop.
module cylindertext(text, size, font, r=undef, d=undef, pos=0, outside=true) {
sgn = outside ? 1 : -1;
echo(sgn);
if (pos < len(text)) {
r = is_undef(d) ? r : d / 2;
c = text[pos];
m = textmetrics(text=c, font=font, size=size);
echo(m);
theta_advance = sgn * m.advance[0] * (180 / PI) / r;
rotate(theta_advance/2+90)
translate([0,r,0])
rotate(outside ? 180 : 0)
rotate([90,0,0])
linear_extrude(height=4, center=true, convexity=6)
text(c, size=size, font=font, halign="center", valign="baseline");
echo(c, textmetrics(c, font=font, size=size));
rotate(theta_advance)
cylindertext(text, size, font, r, pos=pos+1, outside=outside);
}
}
difference() {
cylinder(d=36, h=24, center=true);
cylindertext("hello ♥ world", 8, "sans", d=36, outside=true);
}
translate([0,0,24])
difference() {
cylinder(d=42, h=24, center=true);
cylinder(d=36, h=25, center=true);
color("cyan") cylindertext("hello ♥ world", 7, "sans", d=36, outside=false);
translate([0,-48,0])
cube(96, center=true);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment