diff --git a/01_3D-Druck/openscad/_design.png b/01_3D-Druck/openscad/_design.png new file mode 100644 index 0000000..0ca427f Binary files /dev/null and b/01_3D-Druck/openscad/_design.png differ diff --git a/01_3D-Druck/openscad/_operation.png b/01_3D-Druck/openscad/_operation.png new file mode 100644 index 0000000..8dbe4ca Binary files /dev/null and b/01_3D-Druck/openscad/_operation.png differ diff --git a/01_3D-Druck/openscad/_review.png b/01_3D-Druck/openscad/_review.png new file mode 100644 index 0000000..a9087e9 Binary files /dev/null and b/01_3D-Druck/openscad/_review.png differ diff --git a/01_3D-Druck/openscad/_support.png b/01_3D-Druck/openscad/_support.png new file mode 100644 index 0000000..ba07c8b Binary files /dev/null and b/01_3D-Druck/openscad/_support.png differ diff --git a/01_3D-Druck/openscad/_transition.png b/01_3D-Druck/openscad/_transition.png new file mode 100644 index 0000000..81f4d0b Binary files /dev/null and b/01_3D-Druck/openscad/_transition.png differ diff --git a/01_3D-Druck/openscad/phasen-ring.scad b/01_3D-Druck/openscad/phasen-ring.scad index 12a79f5..c8a554c 100644 --- a/01_3D-Druck/openscad/phasen-ring.scad +++ b/01_3D-Druck/openscad/phasen-ring.scad @@ -5,50 +5,129 @@ // 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. +// Gravur je Segment: ICON (oben) + Phasenname (darunter). Icons als gefuellte +// Silhouetten (lesen sich graviert besser als Linien), alle etwa gleich gross. +// +// Druckfertige Einzelteile: phasen-ring-design/-transition/-operation/-support/ +// -review.scad (rufen nur phase_segment(idx) auf). Direkt geoeffnet = ganzer Ring. -// --- Phasendaten (Funktionen -> per `use` importierbar) --------------------- +// --- Phasendaten ------------------------------------------------------------ function ph_name(i) = ["DESIGN","TRANSITION","OPERATION","SUPPORT","REVIEW"][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; + a0 = 90 - a/2; a1 = 90 + a/2; big = r_out + 10; intersection() { - difference() { // Annulus + difference() { 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)]]); + linear_extrude(seg_h) + 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) -------------------- +// ============================ ICONS (2D, gefuellt) ========================= +// jeweils zentriert um (0,0), ~ +/- 8.5 mm Bauraum. + +module ic_design() { // Dokument/Plan + quer liegender Bleistift + difference() { + offset(0.9) offset(-0.9) translate([-4.5,-8]) square([9,16]); // abger. Hochformat + for (yy = [4.3, 1.8, -0.7, -3.2, -5.7]) // Linien (Stege) + translate([-3, yy]) square([6, 1.0]); + } + // Bleistift diagonal, ragt unten-links + oben-rechts heraus -> klar erkennbar + rotate(38) translate([3.5, 0]) union() { + translate([-1, -9]) square([2, 16]); // Schaft + translate([0, 7]) polygon([[-1,0],[1,0],[0,2.6]]); // Spitze + translate([-1,-9]) square([2, 1.6]); // Radierer-Ende + } +} + +module ic_rocket() { // Rakete + Schub + difference() { + union() { + hull() { translate([0,5]) circle(r=2.8,$fn=28); + translate([0,-2.5]) circle(r=2.8,$fn=28); } + polygon([[-2.8,5],[2.8,5],[0,9]]); // Nase + polygon([[-2.8,-0.5],[-5.6,-4.5],[-2.8,-3.5]]); // Finne links + polygon([[ 2.8,-0.5],[ 5.6,-4.5],[ 2.8,-3.5]]); // Finne rechts + polygon([[-1.8,-2.8],[1.8,-2.8],[0,-7.5]]); // Flamme + } + translate([0,3.6]) circle(r=1.3,$fn=20); // Fenster + } +} + +module gear(R, teeth, hole) { + difference() { + union() { + circle(r = R, $fn = 44); + for (i = [0:teeth-1]) + rotate(360/teeth*i) translate([R,0]) + square([R*0.5, R*0.55], center = true); + } + circle(r = hole, $fn = 28); + } +} +module ic_gears() { // zwei Zahnraeder + translate([-2, 1.5]) gear(5.2, 8, 2.0); + translate([4.5,-4]) gear(3.0, 7, 1.2); +} + +module ic_headset() { // Headset + union() { + difference() { // Buegel (oberer Halbring) + circle(r=7.2,$fn=44); circle(r=5.4,$fn=44); + translate([-9,-9]) square([18,9]); + } + translate([-6.3,-1.5]) square([3.4,5.5], center=true); // Ohr links + translate([ 6.3,-1.5]) square([3.4,5.5], center=true); // Ohr rechts + hull() { translate([6.3,-4]) circle(r=0.8,$fn=16); // Mikro-Arm + translate([1.8,-6.5]) circle(r=0.8,$fn=16); } + translate([1.8,-6.5]) circle(r=1.4,$fn=20); // Mikrofon + } +} + +module ic_review() { // Lupe mit Haken + union() { + difference() { circle(r=5.6,$fn=44); circle(r=3.9,$fn=44); } // Glas-Ring + rotate(-45) translate([4.8,-1.1]) square([5.5,2.2]); // Griff + // Haken im Glas + hull(){ translate([-2,0.2]) circle(r=0.7,$fn=16); + translate([-0.6,-1.3]) circle(r=0.7,$fn=16); } + hull(){ translate([-0.6,-1.3]) circle(r=0.7,$fn=16); + translate([2.2,2]) circle(r=0.7,$fn=16); } + } +} + +// per-Icon-Skalierung -> alle optisch etwa gleich gross +module icon(i) { + if (i==0) scale(0.92) ic_design(); + else if (i==1) scale(1.15) ic_rocket(); + else if (i==2) scale(1.12) ic_gears(); + else if (i==3) scale(1.08) ic_headset(); + else scale(1.08) ic_review(); +} + +// --- ein Segment ------------------------------------------------------------ module phase_segment(idx, r_out = 90, r_in = 42, seg_h = 6, seg_ang = 72, gap_deg = 1.2, - eng_depth = 1.0, name_size = 9) { + eng_depth = 1.0, name_size = 8, icon_size = 1.0, + icon_y = 75, name_y = 54) { $fn = 96; color(ph_col(idx)) difference() { ring_sector(seg_ang - gap_deg, r_out, r_in, seg_h); - // Phasenname, mittig im Band (Radius ~66) - translate([0, (r_in + r_out)/2, seg_h - eng_depth]) - linear_extrude(eng_depth + 0.1) - text(ph_name(idx), size=name_size, halign="center", valign="center"); + translate([0,0,seg_h - eng_depth]) linear_extrude(eng_depth + 0.1) { + translate([0, icon_y]) scale(icon_size) icon(idx); + translate([0, name_y]) text(ph_name(idx), size=name_size, + halign="center", valign="center"); + } } } -// --- VORSCHAU (nur wenn diese Datei direkt geoeffnet wird; bei `use` ignoriert) +// --- VORSCHAU (nur direkt geoeffnet; bei `use` ignoriert) ------------------- for (i = [0:4]) rotate([0,0, -i*72]) phase_segment(i);