94 lines
3.4 KiB
OpenSCAD
94 lines
3.4 KiB
OpenSCAD
// SOR-Sonder-Tile (Gremium) — Service Operations Runde
|
|
// SLC-Workshop Tabletop · Einheiten: mm
|
|
// Die SOR ist kein Einzel-Figur, sondern ein Gremium -> eigenes Tile:
|
|
// - Gate-Tor wird am Eingang (Vorderkante) installiert -> Eingang ins Gremium
|
|
// - Mitte: Platz fuer den Entscheidungs-Chip (Ø30); alternativ "Gremium" graviert
|
|
// - rundherum: Standfelder fuer die teilnehmenden Figuren (gestellt, kein Pin)
|
|
|
|
/* [Tile] */
|
|
tile_size = 120; // etwas groesser als Standardtile (Platz fuer Ring + Gate)
|
|
tile_height = 6;
|
|
corner_r = 4;
|
|
|
|
/* [Mitte: Chip oder Gravur] */
|
|
use_chip = true; // true: Chip-Mulde Ø30 · false: "Gremium" eingraviert
|
|
chip_d = 30;
|
|
chip_recess_d = 0.6; // Spielpassung
|
|
chip_depth = 1.5; // Mulden-Tiefe fuer den Chip
|
|
gremium_text = "Gremium";
|
|
gremium_size = 12;
|
|
gremium_depth = 0.8;
|
|
|
|
/* [Ring aus Standfeldern] */
|
|
ring_count = 6; // Plaetze fuer Gremiums-Figuren rund um die Mitte
|
|
ring_d = 84; // Kreisdurchmesser, auf dem die Standfelder liegen
|
|
spot_d = 8; // Standfeld-Durchmesser
|
|
spot_depth = 0.5; // Gravurtiefe (Markierung, kein Loch)
|
|
|
|
/* [Gate-Eingang an der Vorderkante] */
|
|
gate_seat_w = 116; // Breite der Aufsetzflaeche fuer das Gate (Fuesse 2x60)
|
|
gate_seat_d = 30; // Tiefe (= Gate-Fusstiefe)
|
|
gate_seat_depth = 1.5; // flache Mulde, in der die Gate-Fuesse stehen
|
|
gate_label = "SOR";
|
|
gate_label_size = 7;
|
|
gate_label_depth= 0.8;
|
|
|
|
/* [Puzzle-Tab am Eingang -> Anschluss an die Bahn] */
|
|
tab_w = 12; tab_d = 6;
|
|
|
|
$fn = 96;
|
|
|
|
module rounded_square(s, r, h) {
|
|
linear_extrude(h) offset(r) offset(-r) square([s, s], center=true);
|
|
}
|
|
|
|
module ring_spots() {
|
|
for (i = [0 : ring_count - 1]) {
|
|
a = 360/ring_count * i;
|
|
x = (ring_d/2) * cos(a);
|
|
y = (ring_d/2) * sin(a);
|
|
translate([x, y, tile_height - spot_depth])
|
|
cylinder(d = spot_d, h = spot_depth + 0.1);
|
|
}
|
|
}
|
|
|
|
module center_feature() {
|
|
if (use_chip) {
|
|
// Mulde fuer den Entscheidungs-Chip
|
|
translate([0, 0, tile_height - chip_depth])
|
|
cylinder(d = chip_d + chip_recess_d, h = chip_depth + 0.1);
|
|
} else {
|
|
// "Gremium" eingraviert
|
|
translate([0, 0, tile_height - gremium_depth])
|
|
linear_extrude(gremium_depth + 0.1)
|
|
text(gremium_text, size = gremium_size,
|
|
halign = "center", valign = "center");
|
|
}
|
|
}
|
|
|
|
module gate_entrance() {
|
|
// flache Mulde an der Vorderkante (Suedkante), in die die Gate-Fuesse gestellt werden
|
|
translate([0, -tile_size/2 + gate_seat_d/2, tile_height - gate_seat_depth])
|
|
cube([gate_seat_w, gate_seat_d, gate_seat_depth + 0.1], center = true);
|
|
// Beschriftung "SOR" an der Vorderkante
|
|
translate([0, -tile_size/2 + gate_seat_d + gate_label_size, tile_height - gate_label_depth])
|
|
linear_extrude(gate_label_depth + 0.1)
|
|
text(gate_label, size = gate_label_size, halign = "center", valign = "center");
|
|
}
|
|
|
|
module sor_tile() {
|
|
difference() {
|
|
union() {
|
|
rounded_square(tile_size, corner_r, tile_height);
|
|
// Puzzle-Tab am Eingang (Suedkante) zum Anschluss an die Bahn
|
|
translate([0, -tile_size/2 - tab_d, 0])
|
|
cube([tab_w, tab_d*2, tile_height]);
|
|
}
|
|
center_feature();
|
|
ring_spots();
|
|
gate_entrance();
|
|
}
|
|
}
|
|
|
|
sor_tile();
|
|
echo(tile_size = tile_size, ring_count = ring_count, use_chip = use_chip);
|