// Sonderpuck "Entscheidung / Gate" MIT Beschriftung — 1:1 aus Puck_Entscheidung_mit_Text.svg // Gate-Geometrie (ohne Trennlinien) + Wort-im-Kreis (Original-Font als Pfade) um die Mulde, // von der Oberseite graviert (2,5 mm). Farbe Gate-Rot. /* [Board] */ board_r = 100; base_h = 20; rim_flat = 95; rim_drop = 5; edge_round= 4; /* [Mittelmulde + Ring] */ chip_d = 50; chip_dep = 2.5; ring_mid = 32; ring_w = 2; ring_dep = 2.5; /* [Sockel] */ sock_d = 32.6; sock_dep = 2.5; sock_lead = 0.8; /* [Kartenschlitz] */ slot_cy = 85.4; slot_w = 70; slot_t = 5; slot_depth = 15; /* [Schrift] graviert */ text_dep = 2.5; $fn = 96; SOCK = [ [ 0.74, -75.00], [ 41.14, -62.58], [ 68.42, -30.30], [ 73.92, 11.60], [ 55.88, 49.83], [ 18.83, 65.37], [-17.91, 65.37], [-57.48, 48.42], [-74.55, 9.76], [-68.02, -31.99], [-39.95, -63.58] ]; module board_blank() { rotate_extrude($fn = 240) offset(r = edge_round) offset(delta = -edge_round) polygon([[0,0], [board_r,0], [board_r, base_h - rim_drop], [rim_flat, base_h], [0, base_h]]); } module chip_well() { translate([0,0,base_h-chip_dep]) cylinder(d=chip_d, h=chip_dep+0.1); } module well_ring() { translate([0,0,base_h-ring_dep]) linear_extrude(ring_dep+0.1) difference() { circle(r=ring_mid+ring_w/2); circle(r=ring_mid-ring_w/2); } } module socket(p) { translate([p[0], p[1], base_h-sock_dep]) { cylinder(d=sock_d, h=sock_dep+0.1); translate([0,0,sock_dep-sock_lead]) cylinder(d1=sock_d, d2=sock_d+2*sock_lead, h=sock_lead+0.1); } } module card_slot() { translate([0, slot_cy, base_h - slot_depth/2]) cube([slot_w, slot_t, slot_depth + 0.2], center=true); } // SVG-Import: Dokument 200 mm breit, Board-Mitte bei (100,100) -> nach 0/0 schieben. // offset()-Roundtrip (Clipper) raeumt die importierten Pfade auf -> manifold-sicher. module svg2d(file) { translate([-100,-100]) offset(delta=0.02) offset(delta=-0.02) import(file); } module engrave_top(file) { translate([0,0,base_h-text_dep]) linear_extrude(text_dep+0.1) svg2d(file); } module gate_board_text() { color("#e2001a") difference() { board_blank(); chip_well(); well_ring(); for (p = SOCK) socket(p); // KEINE Trennlinien (Gate) card_slot(); engrave_top("txt_gate.svg"); // Wort im Kreis, von oben graviert } } gate_board_text();