// Aktiv-Feld — RACI-Flaeche (Figuren werden GESTELLT, nicht gesteckt) // SLC-Workshop Tabletop · Einheiten: mm // QUADRATISCHES 2x2-Zonenraster (wie die klassische RACI-Matrix): // R | A // --+-- // C | I // R/C/I haben je 4 Standflaechen (2x2). A hat GENAU EIN zentrales Standfeld // (goldene RACI-Regel: genau eine Rolle ist Accountable). // Standflaechen sind nur flache Gravur-Markierungen (keine Loecher). /* [Platte] */ plate_thick = 6; // Dicke der Flaeche corner_r = 5; plate_margin = 6; // Rand aussen /* [Standflaechen] (flache Markierung, kein Loch) — passend zum Sockel Ø20 */ spot_d = 22; // Durchmesser wie die Puck-Mulden (gleiche Ø20-Figuren stehen hier) spot_depth = 0.6; // Gravurtiefe spot_pitch = 30; // Mitte-zu-Mitte (mehr Luft zwischen den Standfeldern: ~8 mm) a_spot_d = spot_d; // A: GLEICHE Groesse wie die anderen — nur die Anzahl (genau 1) zaehlt /* [Zonen] — [Label, cols, rows, gridX, gridY]; gridY 0 = oben */ zones = [["R", 2, 2, 0, 0], ["A", 1, 1, 1, 0], ["C", 2, 2, 0, 1], ["I", 2, 2, 1, 1]]; n_cols = 2; n_rows = 2; cell_pad = 13; // Rand um die Standflaechen im Feld zone_gap = 6; // Abstand zwischen den Feldern (dichter beieinander) /* [Gravur] */ frame_w = 1.5; // Strichstaerke der Feld-Umrandung frame_depth = 0.6; label_size = 8; // Buchstabe sitzt in der Mittenluecke zwischen den 4 Feldern label_depth = 0.8; $fn = 48; // --- abgeleitete Maße ------------------------------------------------------- // QUADRATISCHE Zellen (Buchstabe in der Mittenluecke, kein Extra-Streifen). spots_span = (2 - 1) * spot_pitch; // 30 (2x2-Raster) cell_w = spots_span + 2 * cell_pad; // 56 cell_h = cell_w; // 56 -> Platte wird quadratisch plate_w = n_cols * cell_w + (n_cols - 1) * zone_gap + 2 * plate_margin; // 130 plate_h = n_rows * cell_h + (n_rows - 1) * zone_gap + 2 * plate_margin; // 130 function zone_cx(gx) = -plate_w/2 + plate_margin + cell_w/2 + gx * (cell_w + zone_gap); function zone_cy(gy) = plate_h/2 - plate_margin - cell_h/2 - gy * (cell_h + zone_gap); // --- Geometrie -------------------------------------------------------------- module rrect(l, w, h, r) { linear_extrude(h) offset(r) offset(-r) square([l, w], center = true); } module field_frame(cx, cy) { // eingravierte Umrandung -> grenzt den Bereich ab translate([cx, cy, plate_thick - frame_depth]) linear_extrude(frame_depth + 0.1) difference() { square([cell_w, cell_h], center = true); square([cell_w - 2*frame_w, cell_h - 2*frame_w], center = true); } } module zone_marks(z) { lab = z[0]; nc = z[1]; nr = z[2]; cx = zone_cx(z[3]); cy = zone_cy(z[4]); if (lab == "A") { // genau EIN Standfeld in der Rasterposition RECHTS OBEN; Buchstabe mittig (wie R/C/I) translate([cx + spot_pitch/2, cy + spot_pitch/2, plate_thick - spot_depth]) cylinder(d = a_spot_d, h = spot_depth + 0.1); } else { // 2x2 Standfelder zentriert for (c = [0 : nc - 1]) for (r = [0 : nr - 1]) { sx = cx + (c - (nc - 1)/2) * spot_pitch; sy = cy + ((nr - 1)/2 - r) * spot_pitch; translate([sx, sy, plate_thick - spot_depth]) cylinder(d = spot_d, h = spot_depth + 0.1); } } // Buchstabe in der Mittenluecke (alle Zonen gleich) translate([cx, cy, plate_thick - label_depth]) linear_extrude(label_depth + 0.1) text(lab, size = label_size, halign = "center", valign = "center"); } module aktiv_feld() { difference() { rrect(plate_w, plate_h, plate_thick, corner_r); for (i = [0 : len(zones) - 1]) { z = zones[i]; field_frame(zone_cx(z[3]), zone_cy(z[4])); zone_marks(z); } } } aktiv_feld(); echo(plate_w = plate_w, plate_h = plate_h, plate_thick = plate_thick);