Files
wordclock/cad/openscad/wortfolie.scad
T

73 lines
2.5 KiB
OpenSCAD

// Wortfolie der Wortuhr (11 Spalten x 10 Zeilen) für IKEA SANNAHED
// Die Buchstaben sind Aussparungen in der (schwarzen) Folie.
// Export als 2D: F6 rendern, dann Datei -> Export -> als DXF / SVG.
// ---------- Einstellungen ----------
// Rahmengröße (Bildfläche des SANNAHED): 25, 35 oder 50 (cm)
rahmen_cm = 25; // [25, 35, 50]
spiel_mm = 1; // Luft pro Seite zwischen Folie und Rahmen-Innenmaß
rand_mm = 15; // freier Rand von der Folienkante bis zum Buchstabenfeld
// (Rahmenfalz verdeckt ca. 1 cm der Bildfläche)
buchstaben_anteil = 0.62; // Buchstabenhöhe relativ zum Zellenabstand
schrift = "Liberation Sans:style=Bold";
minutenpunkte = true; // 4 Punkte in den Ecken für die Minuten
punkt_d_anteil = 0.18; // Punktdurchmesser relativ zum Zellenabstand
dicke_mm = 0; // 0 = flache 2D-Ausgabe (für Laser/DXF), >0 = 3D-Vorschau
// ---------- Buchstabenraster ----------
// Ein String pro Zeile, jeweils 11 Zeichen (Füllbuchstaben beliebig).
raster = [
"ESKISTAFÜNF",
"ZWANZIGZEHN",
"VIERTELTVOR",
"HALBNTPNACH",
"NEUNAPIFÜNF",
"ZWEIRTCEINS",
"DREIESPVIER",
"ACHTRLSECHS",
"SIEBENZWÖLF",
"UHRMELFZEHN"
];
// ---------- Berechnung ----------
spalten = 11;
zeilen = len(raster);
folie = rahmen_cm * 10 - 2 * spiel_mm; // Kantenlänge der Folie in mm
feld = folie - 2 * rand_mm; // Kantenlänge des Buchstabenfelds
raster_a = feld / spalten; // Zellenabstand (quadratische Zellen)
buch_h = raster_a * buchstaben_anteil; // Buchstabengröße
// Mittelpunkt der Zelle (Spalte s, Zeile z), Ursprung = Folienmitte, y nach oben
function zx(s) = (s - (spalten - 1) / 2) * raster_a;
function zy(z) = ((zeilen - 1) / 2 - z) * raster_a;
module buchstaben() {
for (z = [0 : zeilen - 1], s = [0 : spalten - 1])
translate([zx(s), zy(z)])
text(raster[z][s], size = buch_h, font = schrift,
halign = "center", valign = "center");
}
module punkte() {
if (minutenpunkte)
for (sx = [-1, 1], sy = [-1, 1])
translate([sx * (folie / 2 - rand_mm / 2), sy * (folie / 2 - rand_mm / 2)])
circle(d = raster_a * punkt_d_anteil, $fn = 32);
}
module folie_2d() {
difference() {
square(folie, center = true);
buchstaben();
punkte();
}
}
if (dicke_mm > 0) linear_extrude(dicke_mm) folie_2d();
else folie_2d();
echo(str("Folie ", folie, " x ", folie, " mm, Zellenabstand ", raster_a,
" mm, Buchstabenhöhe ", buch_h, " mm"));