// Gate-Tile — Gate-Position mit Figuren-Standfeldern + Entscheidungs-Icon // SLC-Workshop Tabletop · Einheiten: mm // Identische Außenmaße wie das Aktivitaets-Tile (100x100x6), aber EIGENE FARBE. // - 8 generische Standfelder (Ring) fuer die Figuren (Sockel Ø20) // - 2 Stecksockel: das Gate-Tor steckt mit 2 Zapfen ein // - Mitte: eingraviertes "Entscheidung"-Icon (3 Pfeile + Fragezeichen) — sonst KEINE Beschriftung // 3 Stueck: Gate 1, 2, 3 (Modell identisch; Unterschied nur Position/Karte). /* [Tile] */ tile_size = 100; tile_height = 6; corner_r = 3; /* [Puzzle-Tabs] (wie Aktivitaets-Tile) */ tab_w = 12; tab_d = 6; fit_clear = 0.4; /* [Standfelder] — 8 Figuren (Sockel Ø20), generisch */ spot_count = 8; ring_d = 62; // Kreisdurchmesser fuer die 8 Standfelder spot_d = 18; // Markierung (etwas < Sockel Ø20) spot_depth = 0.6; /* [Gate-Stecksockel] — Gate-Tor steckt mit 2 Zapfen ein */ gate_peg_d = 10.4; // Loch (Zapfen Ø10 + Passung) gate_peg_depth = 5; gate_peg_dx = 40; // halber Abstand (= Gate-Pfostenmitte) gate_peg_y = -tile_size/2 + 12; // nahe Eingangskante (Sued) /* [Entscheidungs-Icon (Gravur Mitte)] */ icon_depth = 0.6; $fn = 64; // --- Geometrie-Helfer ------------------------------------------------------- module rounded_square(s, r, h) { linear_extrude(h) offset(r) offset(-r) square([s, s], center = true); } module tab(positive = true) { d = positive ? tab_d : tab_d + fit_clear; w = positive ? tab_w : tab_w + fit_clear; translate([0, 0, tile_height/2]) cube([w, d*2, tile_height], center = true); } module ring_spots() { for (i = [0 : spot_count - 1]) { a = 360/spot_count * i; translate([(ring_d/2)*cos(a), (ring_d/2)*sin(a), tile_height - spot_depth]) cylinder(d = spot_d, h = spot_depth + 0.1); } } module gate_pegs() { for (x = [-1, 1]) translate([x*gate_peg_dx, gate_peg_y, tile_height - gate_peg_depth]) cylinder(d = gate_peg_d, h = gate_peg_depth + 0.1); } // --- Entscheidungs-Icon: offener Ring + Fragezeichen + 3 Pfeile nach oben ---- module arrow2d(ang, len, shaft_w = 1.8, head = 4) { rotate(ang) union() { translate([-shaft_w/2, 0]) square([shaft_w, len]); translate([0, len]) polygon([[-head/2, 0], [head/2, 0], [0, head]]); } } module decision_icon() { // offener Ring (oben aufgeschnitten, damit die Pfeile austreten) difference() { circle(r = 12); circle(r = 9.5); translate([-7, 3]) square([14, 14]); } // Fragezeichen im Ring translate([0, -4]) text("?", size = 9, halign = "center", valign = "center"); // drei Pfeile faechern nach oben (links / hoch / rechts) translate([0, 3]) { arrow2d(0, 9); arrow2d(38, 8); arrow2d(-38, 8); } } // --- Tile ------------------------------------------------------------------ module gate_tile() { difference() { union() { rounded_square(tile_size, corner_r, tile_height); translate([0, tile_size/2, 0]) tab(true); // Nord-Tab translate([ tile_size/2, 0, 0]) rotate([0,0,90]) tab(true); // Ost-Tab } // Slots Sued + West (Anschluss an die Bahn) translate([0, -tile_size/2, 0]) tab(false); translate([-tile_size/2, 0, 0]) rotate([0,0,90]) tab(false); // Standfelder + Gate-Stecksockel + Icon (alle als Gravur/Loch) ring_spots(); gate_pegs(); translate([0, 0, tile_height - icon_depth]) linear_extrude(icon_depth + 0.1) decision_icon(); } } gate_tile(); echo(tile_size = tile_size, standfelder = spot_count, ring_d = ring_d);