OpenSCAD: Praxis

Akademie

OpenSCAD: Praxis

Ein parametrisches Beispielprojekt und bewährte Rezepte.

Bewährte Rezepte: Muster, Verrundungen, Hüllenketten

Begriffe vorab

  • Rezept: Kompakte, wiederverwendbare Lösung für ein typisches Problem.
  • Hüllenkette: Mehrere hull()-Aufrufe zwischen aufeinanderfolgenden Objekten.
  • Fillet: Rundung einer Innenkante.
  • Lineares Muster: Wiederholung eines Objekts entlang einer Linie.
  • Bounding Box: Umschließender Quader eines Objekts.

Rezept 1: Lineare und rechteckige Muster

Für Bohrungsreihen und Lüftungsschlitze genügt eine for-Schleife mit einer Formel für die Position. Mehrere Schleifenvariablen (for (x = …, y = …)) erzeugen Raster.

// Lüftungsgitter: Platte mit Schlitzen
difference() {
    cube([50, 30, 3]);
    for (i = [0 : 7])
        translate([5 + i * 5, 5, -1]) cube([2, 20, 5]);
}

Rezept 2: Weiche Übergänge mit Hüllenketten

Die Doku beschreibt das Muster aus „Tips and Tricks“: Mit for (i = [1 : n]) erzeugst du hull()-Segmente zwischen aufeinanderfolgenden, verschobenen Objekten. Ergebnis sind glatte Bahnen und Rohre entlang beliebiger Punktfolgen.

// Rohr entlang einer Punktfolge: hull() zwischen aufeinanderfolgenden Kugeln
pfad = [[0,0,0], [20,0,10], [40,15,10], [60,15,30]];
for (i = [1 : len(pfad) - 1])
    hull() {
        translate(pfad[i - 1]) sphere(r = 3, $fn = 16);
        translate(pfad[i])     sphere(r = 3, $fn = 16);
    }

Rezept 3: Verrundungen

In 2D rundest du mit offset (Round und Fillet, siehe Lektion „Hüllen, Minkowski-Summe und Rundungen“). In 3D rundest du außen mit minkowski() und einer Kugel: minkowski() { children(); sphere(r); }. Innenrundungen entstehen entsprechend durch Abziehen eines vergrößerten Körpers.

Rezept 4: Mit Listen konstruieren

Punktlisten für polygon erzeugst du mit List Comprehensions, Bauteillisten mit Funktionen wie map-ähnlichen Ausdrücken: [ for (x = eingabe) f(x) ], Filter mit [ for (x = eingabe) if (bedingung(x)) x ]. Fehlende Funktionsargumente werden zu undef – Standardwerte schützen davor.

// Gestufter Turm aus einer Liste von Radien
radien = [14, 12, 10, 8, 6, 4];
module turm(liste, stufe = 6) {
    for (i = [0 : len(liste) - 1])
        translate([0, 0, i * stufe]) cylinder(h = stufe, r = liste[i], $fn = 48);
}
turm(radien);

// Nur Radien über 8 behalten
grosse = [ for (r = radien) if (r > 8) r ];
echo(grosse);

Rezept 5: Tap-Muster für echo

Ein praktisches Muster aus der Doku: Eine Funktion gibt einen Wert per echo aus und liefert ihn unverändert zurück. So kannst du Zwischenwerte mitten in einer Berechnung sichtbar machen, ohne die Berechnung umzubauen.

function tap(x, name = "wert") = let (u = echo(name, x)) x;

abstand = tap(norm([3, 4]), "abstand");   // gibt 5 aus und liefert 5
cylinder(h = abstand, r = 2, $fn = 24);

Das Muster eignet sich für Ketten: a = tap(f(tap(g(x)))) zeigt dir beide Zwischenstände.

Sammle eigene Rezepte als kleine Module in einer Bibliotheksdatei – jedes gelöste Problem spart dir beim nächsten Projekt Zeit.

Zum Selbermachen

  1. Baue das Lüftungsgitter so um, dass Anzahl und Abstand der Schlitze Parameter sind.
  2. Erzeuge eine Spirale aus Hüllenkette und Winkelfunktionen.

Verwandte Themen

OpenSCAD → Die übrigen Lektionen dieser Themenwelt; Informatik: Grundlagen → „Algorithmen und Berechenbarkeit“ für das Denken in Schritten.

Prüfstatus: Belegt (Stand 1. Oktober 2026): Die Rezepte stützen sich auf die in „Tips and Tricks“ beschriebenen Muster (Hüllenketten, Minkowski-Rundung, Offset-Rundung, List-Comprehension-Filter, Standardwerte gegen undef, echo-Tap) und die zugehörigen Sprachseiten. Alle Codebeispiele dieser Lektion wurden mit OpenSCAD 2026.09.18 (lokale Installation) ausgeführt und liefen ohne Fehler und Warnungen. Nicht einzeln belegt: die konkreten Beispiele (eigene Konstruktionen; das Tap-Muster ist in der Doku nur beschrieben, die hier gezeigte Umsetzung ist meine). Außerdem nicht einzeln belegt: die Erklärungen in eigenen Worten, die Beispiele als solche (konstruiert) und die Wertungen.

Quellen

  • OpenSCAD User Manual – Tips and Tricks (en.wikibooks.org/wiki/OpenSCAD_User_Manual/Tips_and_Tricks)
  • OpenSCAD User Manual – List Comprehensions (en.wikibooks.org/wiki/OpenSCAD_User_Manual/List_Comprehensions)
  • OpenSCAD Cheat Sheet (openscad.org/cheatsheet, bezieht sich auf Version 2021.01)

Praxisprojekt: parametrische Box mit Deckel

Begriffe vorab

  • Wandstärke: Dicke der Außenwände.
  • Toleranz: Spiel zwischen Teilen, damit sie passen.
  • Parametrisch: Alle Maße hängen von wenigen Variablen ab.
  • Modul: Wiederverwendbarer Baustein.
  • Aufmaß: Zugabe, damit Passungen nach dem Druck funktionieren.

Ziel

Dieses Projekt führt die bisherigen Lektionen zusammen: Variablen, Module, boolesche Operationen, hull für Rundungen, for für Muster und Customizer-Kommentare. Es entsteht eine rechteckige Box mit Deckel, deren Maße sich über wenige Variablen ändern lassen. Der Entwurf ist ein eigenes Beispiel, keine Vorlage aus der Doku.

Vorgehen in Schritten

  1. Parameter festlegen: Innenmaße, Wandstärke, Eckenradius, Toleranz.
  2. Grundform bauen: ein Modul für einen abgerundeten Quader (hull über vier Zylinder).
  3. Box = Außen minus Innen: difference() mit einem Innenkörper, der oben herausragt.
  4. Deckel: eine Platte mit einer umlaufenden Lippe, die mit Toleranz in die Box passt.
  5. Anordnen: beide Teile nebeneinander legen, damit sie sich drucken lassen.
/* [Maße] */
innen_b = 60;      // Innenbreite (mm)
innen_t = 40;      // Innentiefe (mm)
innen_h = 25;      // Innenhöhe (mm)
wand    = 2;       // [1:0.5:4]
radius  = 4;       // [0:1:10]
spiel   = 0.3;     // Toleranz zwischen Deckel und Box

/* [Hidden] */
$fn = 48;
eps = 0.01;

// Abgerundeter Quader (Ecken in der xy-Ebene)
module rundquader(b, t, h, r) {
    hull()
        for (x = [r, b - r], y = [r, t - r])
            translate([x, y, 0]) cylinder(h = h, r = r);
}

module box() {
    ab = innen_b + 2 * wand;
    at = innen_t + 2 * wand;
    difference() {
        rundquader(ab, at, innen_h + wand, radius + wand);
        translate([wand, wand, wand])
            rundquader(innen_b, innen_t, innen_h + 1, max(radius, 0.1));
    }
}

module deckel() {
    ab = innen_b + 2 * wand;
    at = innen_t + 2 * wand;
    // Platte
    rundquader(ab, at, wand, radius + wand);
    // Lippe, die mit Spiel in die Box passt
    translate([wand + spiel, wand + spiel, wand - eps])
        difference() {
            rundquader(innen_b - 2 * spiel, innen_t - 2 * spiel, 4, max(radius - spiel, 0.1));
            translate([wand, wand, -1])
                rundquader(innen_b - 2 * spiel - 2 * wand, innen_t - 2 * spiel - 2 * wand, 6, 0.1);
        }
}

box();
translate([0, innen_t + 2 * wand + 10, 0]) deckel();

Was du daraus lernst

  • Ableitungen statt Zahlen: Außenmaße ergeben sich aus Innenmaßen plus Wandstärke. Ändert sich ein Parameter, folgt der Rest.
  • Epsilon: Der Innenraum ragt über die Oberkante hinaus (innen_h + 1), die Lippe überlappt die Platte um eps.
  • Toleranz: Das Spiel von 0,3 mm ist ein Beispielwert; er hängt vom Drucker ab und muss ausprobiert werden.
  • Module: rundquader wird dreimal wiederverwendet.

Beginne jedes Projekt mit den Parametern: Wer erst baut und später parametrisiert, schreibt vieles doppelt.

Zum Selbermachen

  1. Füge dem Deckel eine Griffmulde (abgezogene Kugel) hinzu.
  2. Ergänze vier Schraubenlöcher in den Ecken per for-Schleife.

Verwandte Themen

OpenSCAD → Die übrigen Lektionen dieser Themenwelt; Informatik: Grundlagen → „Algorithmen und Berechenbarkeit“ für das Denken in Schritten.

Prüfstatus: Belegt (Stand 1. Oktober 2026): Die verwendeten Konstrukte (hull, difference, for, Module, Customizer-Syntax, Epsilon-Prinzip) stützen sich auf die in den vorherigen Lektionen belegten Seiten des User Manuals. Alle Codebeispiele dieser Lektion wurden mit OpenSCAD 2026.09.18 (lokale Installation) ausgeführt und liefen ohne Fehler und Warnungen. Nicht einzeln belegt: das gesamte Projekt (eigener Entwurf, keine Vorlage aus der Doku) und der Toleranzwert 0,3 mm (Beispielwert, druckerabhängig). Außerdem nicht einzeln belegt: die Erklärungen in eigenen Worten, die Beispiele als solche (konstruiert) und die Wertungen.

Quellen

  • OpenSCAD User Manual – Primitive Solids (en.wikibooks.org/wiki/OpenSCAD_User_Manual/Primitive_Solids)
  • OpenSCAD User Manual – CSG Modelling (en.wikibooks.org/wiki/OpenSCAD_User_Manual/CSG_Modelling)
  • OpenSCAD User Manual – Customizer (en.wikibooks.org/wiki/OpenSCAD_User_Manual/Customizer)
  • OpenSCAD User Manual – Tips and Tricks (en.wikibooks.org/wiki/OpenSCAD_User_Manual/Tips_and_Tricks)
  • OpenSCAD Cheat Sheet (openscad.org/cheatsheet, bezieht sich auf Version 2021.01)