This commit is contained in:
breitenbach76 2026-06-09 17:39:04 +02:00
parent 6376e8365a
commit 9075692196
35 changed files with 39373 additions and 1899 deletions

View file

@ -0,0 +1,100 @@
// Gemeinsame Geometrie fuer alle Phasen-Boards (RACI-Konsole).
// Geometrie 1:1 aus den Illustrator-SVGs; Schrift als Pfade aus dem SVG importiert.
// Aufruf aus board-<phase>.scad: use <board-common.scad> phase_board("word_design.svg","#2f80c9");
// txt_raci.svg -> R/A/C/I, graviert von der Oberseite (text_dep)
// word_*.svg -> Phasenname, graviert in den Mulden-Boden (text_dep)
/* [Board] */
board_r = 100; // Ø200
base_h = 20;
rim_flat = 95;
rim_drop = 5;
edge_round= 4;
/* [Mittelmulde + Ring] */
chip_d = 50;
chip_dep = 2.5;
ring_mid = 32; // Ø64
ring_w = 2;
ring_dep = 2.5;
/* [Sockel] */
sock_d = 32.6; // Ø32 + 0,6 Spiel
sock_dep = 2.5;
sock_lead = 0.8;
/* [Trennlinien] */
div_w = 2;
div_dep = 2.5;
div_ri = 34;
div_ro = 93;
/* [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]
];
DIV = [-105.5, -73.3, 57.3, 123.5];
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 divider(a) {
rmid = (div_ri+div_ro)/2; len = div_ro-div_ri;
translate([rmid*cos(a), rmid*sin(a), base_h-div_dep])
rotate([0,0,a]) linear_extrude(div_dep+0.1) square([len, div_w], center=true);
}
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 ist 200 mm breit, Board-Mitte liegt 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); }
// RACI von der Oberseite gravieren
module engrave_top(file) {
translate([0,0,base_h-text_dep]) linear_extrude(text_dep+0.1) svg2d(file);
}
// Phasenname in den Mulden-Boden gravieren
module engrave_well(file) {
translate([0,0,base_h-chip_dep-text_dep]) linear_extrude(text_dep+0.6) svg2d(file);
}
module phase_board(word_svg, col) {
color(col)
difference() {
board_blank();
chip_well();
well_ring();
for (p = SOCK) socket(p);
for (a = DIV) divider(a);
card_slot();
engrave_top("txt_raci.svg");
engrave_well(word_svg);
}
}