Module und Funktionen: eigene Bausteine

LektionOpenSCAD: Programmierenca. 3 Min. Lesezeit

Begriffe vorab

  • Modul: Wiederverwendbarer Baustein, der Geometrie erzeugt.
  • Funktion: Berechnet und liefert einen Wert, erzeugt aber keine Geometrie.
  • children(): Die Kind-Objekte, die einem Modul übergeben werden.
  • Standardwert: Wert, der gilt, wenn kein Argument übergeben wird.
  • Rekursion: Eine Funktion oder ein Modul ruft sich selbst auf.

Funktionen und Module

Die Doku trennt klar: Funktionen liefern Werte, Module führen Aktionen aus, geben aber keine Werte zurück. Es gibt keinen Mechanismus, mit dem ein Modul einen Wert nach außen reicht. Namen dürfen nur a–z, A–Z, 0–9 und Unterstrich enthalten und unterscheiden Groß- und Kleinschreibung.

Funktionen

function name(parameter) = ausdruck; – ein Ausdruck, kein Block. Parameter dürfen Standardwerte haben: function f(x = 3) = 2*x + 1;. Innerhalb von Funktionen setzt let Hilfsvariablen. Funktionsliterale (f = function (x) x * x;) sind ab Version 2021.01 möglich und erfassen Variablen lexikalisch (Closures).

Module

module name(parameter) { … }. Fast jede Anweisung darf im Modul stehen, auch Definitionen weiterer Module und Funktionen (dann nur lokal sichtbar). Variablen im Modul gelten nur innerhalb des jeweiligen Aufrufs.

children()

Ein Modul kann Kind-Objekte übernehmen und sie transformieren – so entstehen eigene „Operatoren“. children() meint alle Kinder, children(index) ein einzelnes, children([start:schritt:ende]) einen Bereich und children([v1, v2]) mehrere. $children enthält die Anzahl der Kinder. Zusammen in einen Block gefasste Objekte zählen als ein Kind.

Rekursion

Mit Endrekursion kann OpenSCAD die Rekursion intern in eine Schleife umwandeln: Das erlaubt bis zu etwa 1.000.000 Aufrufe, normale Rekursion nur einige Tausend. Module haben diese Optimierung nicht. Bei verzweigender Rekursion warnt die Doku: Die Rekursionstiefe unter 7 halten, weil Zahl der Primitive und Vorschauzeit exponentiell wachsen.

// Funktion mit Standardwert und let
function flaeche(b, h = 10) = let (a = b * h) a;
echo(flaeche(4), flaeche(4, 3));            // 40 und 12

// Funktionsliteral (ab 2021.01) und Endrekursion
quadrat = function (x) x * x;
function summe(n, s = 0) = n == 0 ? s : summe(n - 1, s + n);
echo(quadrat(5), summe(100));               // 25 und 5050

// Modul mit Standardwerten
module saeule(h = 10, r = 3) {
    cylinder(h = h, r = r, $fn = 32);
    translate([0, 0, h]) sphere(r = r + 1, $fn = 32);
}

// Eigener Operator mit children(): Objekt n-mal im Kreis anordnen
module im_kreis(n, radius) {
    for (i = [0 : n - 1])
        rotate([0, 0, i * 360 / n])
            translate([radius, 0, 0]) children();
}

im_kreis(6, 25) saeule(h = 8, r = 2);
saeule();

Das Modul im_kreis weiß nichts über das, was es verteilt: Es bekommt ein Kind-Objekt und wiederholt es. So entsteht aus drei Zeilen ein wiederverwendbarer Baustein.

Modularisiere früh: Jedes Bauteil, das du zweimal brauchst, gehört in ein Modul mit Parametern.

Zum Selbermachen

  1. Schreibe ein Modul „loch_platte(b, t, h, lochdurchmesser)“.
  2. Baue einen Operator „spiegel_paar“, der sein Kind einmal normal und einmal gespiegelt zeichnet.

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): Unterschied Funktion/Modul, Namensregeln, Standardwerte, Funktionsliterale ab 2021.01, let in Funktionen, children-Varianten, $children-Verhalten, Endrekursion (bis 1.000.000) sowie Rekursionswarnungen wurden gegen die Seite „User-Defined Functions and Modules“ geprüft. Alle Codebeispiele dieser Lektion wurden mit OpenSCAD 2026.09.18 (lokale Installation) ausgeführt und liefen ohne Fehler und Warnungen. Nicht einzeln belegt: die Erklärungen in eigenen Worten, die Beispiele als solche (konstruiert) und die Wertungen.

Quellen

  • OpenSCAD User Manual – User-Defined Functions and Modules (en.wikibooks.org/wiki/OpenSCAD_User_Manual/User-Defined_Functions_and_Modules)
  • OpenSCAD Cheat Sheet (openscad.org/cheatsheet, bezieht sich auf Version 2021.01)

Alles zu „OpenSCAD: Programmieren“