From a57b23e308bb5dd0846ad977dbf931aeef8ed42f Mon Sep 17 00:00:00 2001 From: Mirek Kratochvil Date: Thu, 29 Oct 2026 21:59:11 +0100 Subject: a bit of a clean-up --- ls47.scad | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 ls47.scad (limited to 'ls47.scad') diff --git a/ls47.scad b/ls47.scad new file mode 100644 index 0000000..c77ad78 --- /dev/null +++ b/ls47.scad @@ -0,0 +1,91 @@ + +// No license, but send me a hello if you use this for some good purpose. +// -- Mirek Kratochvil + +font = "FiraMono:style=Bold"; + +//inch-sized tiles look imperial. +tilesize=25.4; +//you might like them a bit larger if you want to use this outdoors + +//distance between tiles +off=tilesize*1.1; +tileheight=tilesize/10; +fontheight=tileheight*0.5; +corner=tileheight*2; + +module arrow(n) { + if (n>=1) + for(i=[0:n-1]) translate([i-(n-1)/2,0,0]) + polygon([[0.45,0],[0,0.7],[-0.45,0]]); +} + +//this produces one tile +module tilec(letter, x, y, c) { + xx = ((10-x)%7)-3; + yy = ((y+3)%7)-3; + dx = sign(xx); + dy = sign(yy); + translate([x*off,(6-y)*off,0]) { + difference() { + color(c) union() { + cube([tilesize,tilesize-corner,tileheight]); + translate([corner, tilesize-corner,0]) + cube([tilesize-2*corner, corner, tileheight]); + translate([corner, tilesize-corner, 0]) + cylinder(tileheight, corner, corner); + translate([tilesize-corner, tilesize-corner, 0]) + cylinder(tileheight, corner, corner); + }; + color("white") { + translate([tilesize*(0.5-dx*0.1),tilesize*(0.3-dy*0.1),tileheight*.5]) + linear_extrude (height=tileheight) + text(letter, font=font, size=tilesize*.48, + halign="center", valign="baseline"); + } + color("white") + translate([tilesize*(0.5+dx*0.3), tilesize*0.5, tileheight*.5]) + scale(4*[dx,1,1]) + rotate([0,0,-90]) + linear_extrude(height=tileheight/4) + arrow(abs(xx)); + color("white") + translate([tilesize*0.5, tilesize*(0.5+dy*0.3), tileheight*.5]) + scale(4*[1,dy,1]) + linear_extrude(height=tileheight/4) + arrow(abs(yy)); + } + } +} + +//tiles +module tile(letter,x,y) { + tilec(letter,x,y,"darkgray"); +} + +module tiles(letters) { + for(i=[0,1,2,3,4,5,6]) for (j=[0,1,2,3,4,5,6]) { + tile(letters[i+7*j], i, j); + } +} + +tiles( + ["_", "A", "B", "C", "D", "E", "F", + "G", "H", "I", "J", "K", "L", "M", + "N", "O", "P", "Q", "R", "S", "T", + "U", "V", "W", "X", "Y", "Z", ".", + ",", ":", "?", "!", "'", "(", ")", + "0", "1", "2", "3", "4", "5", "6", + "7", "8", "9", "+", "-", "*", "/"] +); + +//the token +translate([-off/2,off/2,0]) { + color("red") difference() { + cylinder(h=tileheight, d=tilesize); + translate([0,0,-.1]) + cylinder(h=tileheight*1.2, d=tilesize-2*tileheight); + } +} + + -- cgit v1.2.3