// Phasen-Ring — Bibliothek + Vorschau // SLC-Workshop Tabletop · Einheiten: mm // // 5 Segmente (Donut) als SLC-Uebersicht, die auseinandergenommen die Phasen-KOEPFE // der linearen Puck-Bahn bilden (Design-Segment = Start vor dem ersten Puck). // KEINE Magnete: Segmente werden lose aneinandergelegt. // // Diese Datei ist die GEMEINSAME GEOMETRIE. Druckfertige Einzelteile sind: // phasen-ring-design.scad · -transition.scad · -operation.scad // -support.scad · -review.scad (rufen nur phase_segment(idx) auf) // Direkt geoeffnet zeigt diese Datei den kompletten Ring als VORSCHAU. // --- Phasendaten (Funktionen -> per `use` importierbar) --------------------- function ph_name(i) = ["DESIGN","TRANSITION","OPERATION","SUPPORT","REVIEW"][i]; // Sublabel je Phase als Zeilen-Liste (2 Zeilen, damit es ins Segment passt) function ph_sub(i) = [ ["Planung & Architektur", "eines Services"], ["Überführung des Services", "in den Betrieb"], ["Stabil laufender Betrieb", "des Services"], ["Nutzeranfragen & Incidents", "im laufenden Service"], ["Kontinuierliche Verbesserung", "des laufenden Services"] ][i]; // Phasenfarben (nur Vorschau; im Druck = Filament) function ph_col(i) = [[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]][i]; // --- Geometrie-Helfer ------------------------------------------------------- module ring_sector(a, r_out, r_in, seg_h) { // 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)]]); } } // --- ein Segment (alle Masse als Parameter mit Defaults) -------------------- module phase_segment(idx, r_out = 90, r_in = 42, seg_h = 6, seg_ang = 72, gap_deg = 1.2, eng_depth = 0.8, name_size = 7, sub_size = 3.0) { $fn = 96; sub = ph_sub(idx); color(ph_col(idx)) difference() { ring_sector(seg_ang - gap_deg, r_out, r_in, seg_h); translate([0,0,seg_h - eng_depth]) linear_extrude(eng_depth + 0.1) { // Phasenname translate([0,70]) text(ph_name(idx), size=name_size, halign="center", valign="center"); // Sublabel (mehrzeilig) for (k = [0 : len(sub) - 1]) translate([0, 57 - k*10]) text(sub[k], size=sub_size, halign="center", valign="center"); } } } // --- VORSCHAU (nur wenn diese Datei direkt geoeffnet wird; bei `use` ignoriert) for (i = [0:4]) rotate([0,0, -i*72]) phase_segment(i);