77 lines
2.7 KiB
OpenSCAD
77 lines
2.7 KiB
OpenSCAD
// Aktiv-Feld — RACI-Stecklochleiste
|
|
// SLC-Workshop Tabletop · Einheiten: mm
|
|
// Steht NEBEN dem Action-Stein. Bei jeder Aktivitaet werden die beteiligten
|
|
// Rollen-Figuren nach RACI in die passende Zone gesteckt:
|
|
// R = Responsible · A = Accountable (genau 1) · C = Consulted · I = Informed
|
|
// Anpassen und mit OpenSCAD nach STL exportieren (F6 -> Export).
|
|
|
|
/* [Leiste] */
|
|
strip_w = 26; // Tiefe (zum Spieler)
|
|
strip_h = 6; // Dicke
|
|
corner_r = 3;
|
|
|
|
/* [Steckplaetze] */
|
|
pin_hole_d = 4.2; // Loch fuer Figuren-Pin (Pin Oe 4,0 + Spiel)
|
|
pin_hole_depth = 4;
|
|
pin_pitch = 8; // Mitte-zu-Mitte innerhalb einer Zone
|
|
zone_gap = 10; // Luecke zwischen den Zonen
|
|
end_margin = 8; // Rand links/rechts
|
|
socket_y = 5; // Lochreihe nach hinten versetzt (weg von der Beschriftung)
|
|
|
|
/* [Beschriftung] */
|
|
label_size = 7; // Buchstabengroesse
|
|
label_depth = 0.8; // Gravurtiefe
|
|
label_y = -8; // Position der Buchstaben (vorne, zum Spieler)
|
|
|
|
/* [Zonen] */
|
|
// [Label, Anzahl Steckplaetze] — A bewusst nur 1 (genau eine Rolle accountable)
|
|
zones = [ ["R", 2], ["A", 1], ["C", 3], ["I", 3] ];
|
|
|
|
$fn = 48;
|
|
|
|
// --- Hilfsfunktionen -------------------------------------------------------
|
|
function zone_span(c) = (c - 1) * pin_pitch;
|
|
|
|
function sumspan(i = 0) =
|
|
i >= len(zones) ? 0 : zone_span(zones[i][1]) + sumspan(i + 1);
|
|
|
|
function total_len() =
|
|
end_margin * 2 + zone_gap * (len(zones) - 1) + sumspan();
|
|
|
|
// linker Startversatz der Zone idx (Summe vorheriger Zonen + Luecken)
|
|
function zone_offset(idx, i = 0, acc = 0) =
|
|
i >= idx ? acc
|
|
: zone_offset(idx, i + 1, acc + zone_span(zones[i][1]) + zone_gap);
|
|
|
|
// --- Geometrie -------------------------------------------------------------
|
|
module rounded_rect(l, w, h, r) {
|
|
linear_extrude(h)
|
|
offset(r) offset(-r)
|
|
square([l, w], center = true);
|
|
}
|
|
|
|
module raci_strip() {
|
|
L = total_len();
|
|
difference() {
|
|
rounded_rect(L, strip_w, strip_h, corner_r);
|
|
|
|
for (idx = [0 : len(zones) - 1]) {
|
|
cnt = zones[idx][1];
|
|
sx = -L/2 + end_margin + zone_offset(idx);
|
|
|
|
// Steckplaetze der Zone
|
|
for (i = [0 : cnt - 1])
|
|
translate([sx + i * pin_pitch, socket_y, strip_h - pin_hole_depth])
|
|
cylinder(d = pin_hole_d, h = pin_hole_depth + 0.1);
|
|
|
|
// Zonen-Beschriftung (mittig unter den Loechern)
|
|
cx = sx + zone_span(cnt) / 2;
|
|
translate([cx, label_y, strip_h - label_depth])
|
|
linear_extrude(label_depth + 0.1)
|
|
text(zones[idx][0], size = label_size,
|
|
halign = "center", valign = "center");
|
|
}
|
|
}
|
|
}
|
|
|
|
raci_strip();
|