...
This commit is contained in:
parent
61b6ec23eb
commit
96b86ce340
6 changed files with 117 additions and 170 deletions
|
|
@ -1,172 +1,107 @@
|
|||
// RACI-Konsolen-Board — SLC-Workshop Tabletop · Einheiten: mm
|
||||
// Quadratisches Premium-Board: zentrale Acryl-Chip-Mulde (Stations-/Gate-ID),
|
||||
// 10 Figurenmulden im Ring, gruppiert in 4 RACI-Sektoren (R3 · A1 · C4 · I2),
|
||||
// erhabene Trennstege, gravierte Sektor-Buchstaben + Wörter, gravierte Rand-Linie,
|
||||
// stehender Action-Card-Halter (60x90) hinten.
|
||||
// Druck: 6x in den Phasenfarben (5 Phasen + Gate-Rot). Einfarbig je Board (Filament).
|
||||
// RACI-Konsolen-Board (rund, B+ symmetrisch) — SLC-Workshop Tabletop · mm
|
||||
// Pendant zum Blender-Modell (../blender/raci-board.py). Gleiche Maße.
|
||||
// Rund Ø260, Mittelmulde Ø50 (Chip), 10 Sockel Ø32,8 in 4 gleich grossen 90°-Sektoren
|
||||
// (symmetrisches Kreuz, Trennlinien 0/90/180/270), R3·A1·C4·I2, Sockel je Sektor
|
||||
// gleichmaessig verteilt; Phasenname (DESIGN) im Mulden-Boden; Card-Schlitz 70x5, tief.
|
||||
|
||||
/* [Board] */
|
||||
board_w = 210;
|
||||
board_d = 210;
|
||||
base_h = 10;
|
||||
corner_r = 8;
|
||||
cut_corner = 22; // gefaste Ecke (vorne rechts), Optik
|
||||
board_r = 130; // Aussenradius (Ø260)
|
||||
base_h = 14;
|
||||
edge_cham = 2; // Fase obere Aussenkante
|
||||
|
||||
/* [Dial / Mitte] */
|
||||
dial_cx = 0;
|
||||
dial_cy = -15; // Scheibe etwas nach vorn -> Platz fuer Card-Halter hinten
|
||||
chip_d = 40.6; // Acryl-Chip Ø40 + Spiel
|
||||
chip_dep = 1.8; // Chip 2 mm steht ~0,2 vor (greifbar)
|
||||
notch_r = 6; // Greifkerbe
|
||||
/* [Mittelmulde / Chip] */
|
||||
chip_d = 50;
|
||||
chip_dep = 2.2;
|
||||
notch_d = 14;
|
||||
|
||||
/* [Sockel] — Figuren-Sockel Ø24,5 -> Mulde Ø25,3 */
|
||||
sock_d = 25.3;
|
||||
sock_dep = 1.5;
|
||||
sock_lead = 0.6;
|
||||
ring_R = 48; // Radius Sockelkreis (Mitte-Mitte)
|
||||
/* [Sockel] — Figuren-Sockel Ø32 + Spiel */
|
||||
sock_d = 32.8;
|
||||
sock_dep = 2.0;
|
||||
sock_lead = 0.8;
|
||||
ring_r = 88;
|
||||
|
||||
/* [Sektor-Trennstege] */
|
||||
ridge_h = 2.6;
|
||||
ridge_w = 3.2;
|
||||
/* [Sektoren] — Name, Wort-Mittenwinkel, Sockelwinkel (Grad, 90=oben) */
|
||||
// 4 gleich grosse 90°-Sektoren in den Diagonalen; Trennlinien-Kreuz bei 0/90/180/270.
|
||||
SEC = [
|
||||
["RESPONSIBLE", 135, [98, 135, 172]],
|
||||
["ACCOUNTABLE", 45, [45]],
|
||||
["CONSULTED", -45, [-8, -33, -57, -82]],
|
||||
["INFORMED", -135, [-98, -172]],
|
||||
];
|
||||
DIV = [0, 90, 180, 270];
|
||||
ridge_w = 2.6; ridge_dep = 1.4;
|
||||
|
||||
/* [Gravur] */
|
||||
let_size = 11; // grosse R/A/C/I
|
||||
let_dep = 0.9;
|
||||
word_size = 5; // RESPONSIBLE ...
|
||||
word_dep = 0.7;
|
||||
border_inset = 7;
|
||||
border_w = 1.6;
|
||||
border_dep= 0.7;
|
||||
word_size = 6; word_dep = 0.9;
|
||||
word_r = ring_r + sock_d/2 + 9;
|
||||
design_size = 9; design_dep = 1.0;
|
||||
|
||||
/* [Action-Card-Halter] (Karte 60x90, steht leicht nach hinten geneigt) */
|
||||
card_w = 84; // Plinthen-Breite
|
||||
card_block_d = 22;
|
||||
card_block_h = 16;
|
||||
card_cy = 78; // Position hinten
|
||||
slot_w = 63; // Kartenbreite 60 + Spiel
|
||||
slot_t = 4; // Kartendicke + Spiel
|
||||
slot_tilt = 12; // Grad Neigung nach hinten
|
||||
/* [Action-Card-Halter] */
|
||||
card_cy = 116; card_bw = 84; card_bd = 22; card_bh = 16;
|
||||
slot_w = 70; slot_t = 5; slot_depth = 27; slot_tilt = 12;
|
||||
|
||||
$fn = 64;
|
||||
$fn = 128;
|
||||
|
||||
// 10 Sockel: Winkel ab oben (90°) im Uhrzeigersinn, 36° Schritt.
|
||||
// Gruppen: A=[0] C=[1..4] I=[5,6] R=[7,8,9]
|
||||
function ang(i) = 90 - i*36;
|
||||
GROUP_A = [0];
|
||||
GROUP_C = [1,2,3,4];
|
||||
GROUP_I = [5,6];
|
||||
GROUP_R = [7,8,9];
|
||||
// Sektor-Mittenwinkel (fuer Buchstaben) und Grenzwinkel (fuer Trennstege)
|
||||
A_mid = 90; C_mid = 0; I_mid = -108; R_mid = 162;
|
||||
DIVIDERS = [72, -72, -144, 108];
|
||||
|
||||
module rrect(w, d, h, r) {
|
||||
linear_extrude(h) offset(r) offset(-r) square([w, d], center=true);
|
||||
}
|
||||
|
||||
module base_slab() {
|
||||
difference() {
|
||||
rrect(board_w, board_d, base_h, corner_r);
|
||||
// gefaste Ecke vorne rechts
|
||||
translate([board_w/2, -board_d/2, -1])
|
||||
rotate([0,0,45]) cube([cut_corner, cut_corner, base_h+2], center=true);
|
||||
// --- Grundkoerper (rund, Oberkante gefast) ---------------------------------
|
||||
module board_blank() {
|
||||
hull() {
|
||||
cylinder(r = board_r - edge_cham, h = base_h);
|
||||
cylinder(r = board_r, h = base_h - edge_cham);
|
||||
}
|
||||
}
|
||||
|
||||
module figure_socket(a, r=ring_R) {
|
||||
x = dial_cx + r*cos(a); y = dial_cy + r*sin(a);
|
||||
translate([x, y, base_h - sock_dep]) {
|
||||
cylinder(d=sock_d, h=sock_dep + 0.2);
|
||||
translate([0,0,sock_dep - sock_lead])
|
||||
cylinder(d1=sock_d, d2=sock_d + 2*sock_lead, h=sock_lead + 0.1);
|
||||
}
|
||||
}
|
||||
|
||||
module chip_well() {
|
||||
translate([dial_cx, dial_cy, base_h - chip_dep]) cylinder(d=chip_d, h=chip_dep + 0.2);
|
||||
// Greifkerbe Richtung vorn
|
||||
translate([dial_cx, dial_cy - chip_d/2, base_h - chip_dep])
|
||||
cylinder(r=notch_r, h=chip_dep + 0.2);
|
||||
}
|
||||
|
||||
module grooves() { // konzentrische Deko-Rillen im Innenfeld
|
||||
for (rr = [23 : 2 : 34])
|
||||
translate([dial_cx, dial_cy, base_h - 0.5])
|
||||
linear_extrude(0.6)
|
||||
difference() { circle(r=rr); circle(r=rr-0.8); }
|
||||
}
|
||||
|
||||
module dividers() {
|
||||
for (a = DIVIDERS) {
|
||||
ri = chip_d/2 + 3; ro = ring_R + sock_d/2 + 4;
|
||||
translate([dial_cx, dial_cy, base_h])
|
||||
rotate([0,0,a])
|
||||
translate([(ri+ro)/2, 0, ridge_h/2])
|
||||
cube([ro-ri, ridge_w, ridge_h], center=true);
|
||||
}
|
||||
}
|
||||
|
||||
module letter(a, ch) {
|
||||
rl = ring_R + 13;
|
||||
x = dial_cx + rl*cos(a); y = dial_cy + rl*sin(a);
|
||||
translate([x, y, base_h - let_dep])
|
||||
linear_extrude(let_dep + 0.1)
|
||||
text(ch, size=let_size, halign="center", valign="center",
|
||||
font="DejaVu Sans:style=Bold");
|
||||
}
|
||||
|
||||
module word(txt, x, y, rot) {
|
||||
translate([x, y, base_h - word_dep])
|
||||
rotate([0,0,rot])
|
||||
linear_extrude(word_dep + 0.1)
|
||||
text(txt, size=word_size, halign="center", valign="center");
|
||||
}
|
||||
|
||||
module border_channel() {
|
||||
translate([0,0, base_h - border_dep])
|
||||
linear_extrude(border_dep + 0.1)
|
||||
difference() {
|
||||
offset(-border_inset) offset(corner_r) offset(-corner_r) square([board_w, board_d], center=true);
|
||||
offset(-border_inset-border_w) offset(corner_r) offset(-corner_r) square([board_w, board_d], center=true);
|
||||
}
|
||||
}
|
||||
|
||||
module card_block() {
|
||||
translate([0, card_cy, 0]) rrect(card_w, card_block_d, base_h + card_block_h, 4);
|
||||
}
|
||||
module card_slot() {
|
||||
// oben offener Schlitz, leicht nach HINTEN geneigt; Boden bleibt ~3 mm stehen
|
||||
translate([0, card_cy, 22])
|
||||
rotate([-slot_tilt, 0, 0])
|
||||
cube([slot_w, slot_t, 38], center=true);
|
||||
translate([0, card_cy, (base_h + card_bh)/2])
|
||||
cube([card_bw, card_bd, base_h + card_bh], center = true);
|
||||
}
|
||||
|
||||
// --- Aussparungen ----------------------------------------------------------
|
||||
module chip_well() {
|
||||
translate([0, 0, base_h - chip_dep]) cylinder(d = chip_d, h = chip_dep + 0.1);
|
||||
translate([0, -chip_d/2, base_h - chip_dep]) cylinder(d = notch_d, h = chip_dep + 0.1); // Greifkerbe
|
||||
}
|
||||
module figure_socket(a) {
|
||||
x = ring_r*cos(a); y = ring_r*sin(a); z0 = base_h - sock_dep;
|
||||
translate([x, y, z0]) {
|
||||
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 divider(a) { // flache Trennlinie (graviert)
|
||||
di = chip_d/2 + 5; do = ring_r + sock_d/2 + 6; rmid = (di+do)/2;
|
||||
translate([rmid*cos(a), rmid*sin(a), base_h - ridge_dep])
|
||||
rotate([0,0,a])
|
||||
linear_extrude(ridge_dep + 0.1) square([do-di, ridge_w], center = true);
|
||||
}
|
||||
module sector_label(txt, a) {
|
||||
rot = (sin(a) >= 0) ? a - 90 : a + 90; // tangential, lesbar
|
||||
translate([word_r*cos(a), word_r*sin(a), base_h - word_dep])
|
||||
rotate([0,0,rot])
|
||||
linear_extrude(word_dep + 0.1) text(txt, size = word_size, halign="center", valign="center");
|
||||
}
|
||||
module design_label() { // im Mulden-Boden
|
||||
translate([0, 0, base_h - chip_dep - design_dep])
|
||||
linear_extrude(design_dep + 0.1) text("DESIGN", size = design_size, halign="center", valign="center");
|
||||
}
|
||||
module card_slot() { // oben offen, tief, leicht nach hinten geneigt
|
||||
sb = base_h + card_bh - slot_depth; sh = slot_depth + 20;
|
||||
translate([0, card_cy, sb + sh/2]) rotate([-slot_tilt, 0, 0])
|
||||
cube([slot_w, slot_t, sh], center = true);
|
||||
}
|
||||
|
||||
// --- Zusammenbau -----------------------------------------------------------
|
||||
module raci_board() {
|
||||
difference() {
|
||||
union() {
|
||||
base_slab();
|
||||
dividers();
|
||||
card_block();
|
||||
}
|
||||
union() { board_blank(); card_block(); }
|
||||
chip_well();
|
||||
grooves();
|
||||
for (i=[0:9]) figure_socket(ang(i));
|
||||
// grosse Buchstaben
|
||||
letter(A_mid, "A");
|
||||
letter(C_mid, "C");
|
||||
letter(I_mid, "I");
|
||||
letter(R_mid, "R");
|
||||
// Woerter
|
||||
word("RESPONSIBLE", -ring_R-29, dial_cy+6, 90);
|
||||
word("CONSULTED", ring_R+29, dial_cy+6, -90);
|
||||
word("INFORMED", dial_cx, dial_cy - ring_R - 30, 0);
|
||||
word("ACCOUNTABLE", dial_cx, card_cy - card_block_d/2 - 7, 0);
|
||||
border_channel();
|
||||
for (s = SEC) for (a = s[2]) figure_socket(a);
|
||||
for (a = DIV) divider(a);
|
||||
card_slot();
|
||||
for (s = SEC) sector_label(s[0], s[1]);
|
||||
design_label();
|
||||
}
|
||||
}
|
||||
|
||||
raci_board();
|
||||
|
||||
echo(board=[board_w, board_d, base_h], sockets=10, raci="R3 A1 C4 I2",
|
||||
chip_well=chip_d, sock=sock_d);
|
||||
echo(board_d = 2*board_r, base_h = base_h, chip = chip_d, sock = sock_d,
|
||||
ring_r = ring_r, sockets = 10, card_slot = [slot_w, slot_t, slot_depth]);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue