// Phasen-Ring — 5 Segmente (Donut) als SLC-Uebersicht, die auseinandergenommen // die Phasen-KOEPFE der linearen Puck-Bahn bilden (Design-Segment = Start). // SLC-Workshop Tabletop · Einheiten: mm // // - 1 Segment = 72°-Ringsegment in seiner Phasenfarbe (wie die Pucks). // - Beschriftung GRAVIERT (nur 5 Stueck): Phasenname + Sublabel + einfaches Icon. // - Magnettaschen an beiden Stosskanten: Magnete einkleben -> haelt als Ring zusammen; // ohne Magnete einfach lose aneinanderlegen (Taschen stoeren nicht). // // EXPORT: render_mode="single" + phase=0..4 -> ein Segment je Phase als STL. // VORSCHAU: render_mode="ring" -> alle 5 farbig zusammengesetzt. /* [Render] */ render_mode = "ring"; // "single" (Export) oder "ring" (Vorschau) phase = 0; // 0 Design · 1 Transition · 2 Operation · 3 Support · 4 Review /* [Ring-Geometrie] */ r_out = 90; // Aussenradius (Ø180) r_in = 42; // Innenradius (Ø84) seg_h = 8; // Dicke (etwas dicker als Pucks -> Platz fuer Magnete in der Kante) seg_ang = 72; // 360/5 gap_deg = 1.2; // kleiner Spalt zwischen Segmenten (Passung) /* [Magnettaschen] (an den Stosskanten) */ mag_d = 6.2; // Loch fuer Ø6-Magnet mag_t = 2.2; // Tiefe (Ø6x2-Magnet + Spiel) mag_r1 = 56; // Radius Tasche 1 mag_r2 = 78; // Radius Tasche 2 /* [Gravur] */ eng_depth = 0.8; name_size = 7; sub_size = 3.4; $fn = 96; // --- Phasendaten ------------------------------------------------------------ names = ["DESIGN", "TRANSITION", "OPERATION", "SUPPORT", "REVIEW"]; subs = ["Planung & Architektur", "Kontrollierte Ueberfuehrung", "Stabiler laufender Betrieb", "Nutzeranfragen & Incidents", "Continual Improvement"]; // Phasenfarben (nur Vorschau; im Druck = Filament) pcol = [[0.16,0.44,0.69], [0.88,0.54,0.12], [0.23,0.62,0.29], [0.12,0.62,0.62], [0.49,0.31,0.64]]; // --- Geometrie-Helfer ------------------------------------------------------- module ring_sector(a) { // Ringsegment ueber Winkel a, Bisektor zeigt nach +Y (oben) a0 = 90 - a/2; a1 = 90 + a/2; big = r_out + 10; intersection() { difference() { // Annulus cylinder(r = r_out, h = seg_h); translate([0,0,-0.5]) cylinder(r = r_in, h = seg_h + 1); } linear_extrude(seg_h) // Tortenstueck polygon([[0,0], [big*cos(a0), big*sin(a0)], [big*cos(90), big*1.2], [big*cos(a1), big*sin(a1)]]); } } module magnet_pocket(edge_ang, inward_ang, r) { translate([r*cos(edge_ang), r*sin(edge_ang), seg_h/2]) rotate([0,0,inward_ang]) rotate([0,90,0]) translate([0,0,-0.3]) cylinder(d = mag_d, h = mag_t + 0.3, $fn = 32); } // --- Icons (einfache gravierte Glyphen, 2D) --------------------------------- module icon(i) { // zentriert um (0,0), ~14 mm if (i == 0) // Design: Dokument difference() { square([10,13], center=true); translate([2.5,5.5]) rotate(45) square([6,6]); // gefaltete Ecke } else if (i == 1) // Transition: Pfeil nach rechts union() { translate([-6,-1.6]) square([9,3.2]); translate([3,0]) polygon([[0,-5],[6,0],[0,5]]); } else if (i == 2) // Operation: Zahnkranz (Ring) difference() { circle(r=6.5); circle(r=3.2); } else if (i == 3) // Support: Sprechblase union() { translate([0,1]) square([13,9], center=true); translate([-4,-3.5]) polygon([[0,0],[5,0],[0,-4]]); } else // Review: Kreis-Pfeil (Loop) union() { difference() { difference(){ circle(r=6.5); circle(r=3.8); } translate([3,3]) square([8,8]); // Luecke oben rechts } translate([6.5,2]) polygon([[-2,0],[2,2],[2,-3]]); // Pfeilspitze } } // --- ein Segment ------------------------------------------------------------ module phase_segment(idx) { a = seg_ang - gap_deg; e0 = 90 - a/2; // untere Kante e1 = 90 + a/2; // obere Kante difference() { ring_sector(a); // Magnettaschen: 2 je Stosskante magnet_pocket(e0, e0 + 90, mag_r1); magnet_pocket(e0, e0 + 90, mag_r2); magnet_pocket(e1, e1 - 90, mag_r1); magnet_pocket(e1, e1 - 90, mag_r2); // Gravur (oben) translate([0,0,seg_h - eng_depth]) linear_extrude(eng_depth + 0.1) { translate([0,82]) scale(0.9) icon(idx); translate([0,66]) text(names[idx], size=name_size, halign="center", valign="center"); translate([0,53]) text(subs[idx], size=sub_size, halign="center", valign="center"); } } } // --- Ausgabe ---------------------------------------------------------------- if (render_mode == "ring") { for (i = [0:4]) color(pcol[i]) rotate([0,0, -i*72]) phase_segment(i); } else { color(pcol[phase]) phase_segment(phase); } echo(r_out=r_out, r_in=r_in, seg_h=seg_h, seg_ang=seg_ang);