SLC_Game/01_3D-Druck/openscad/phasen-ring.scad
breitenbach76 677d414a2e Phasen-Ring: neue Sublabels (2-zeilig), Icons entfernt
- ph_sub als 2-Zeilen-Listen mit neuen Texten:
  Design "Planung & Architektur eines Services", Transition "Ueberfuehrung des
  Services in den Betrieb", Operation "Stabil laufender Betrieb des Services",
  Support "Nutzeranfragen & Incidents im laufenden Service", Review
  "Kontinuierliche Verbesserung des laufenden Services".
- icon()-Modul entfernt, Gravur = nur Name + Sublabel.
- materialliste §7 nachgezogen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 23:40:22 +02:00

68 lines
3 KiB
OpenSCAD

// 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);