OpenSCAD Benutzerhandbuch/2D zu 3D
Extrusion ist der Prozess, bei dem ein Objekt mit einem festen Querschnitt erzeugt wird. OpenSCAD bietet zwei Befehle, um aus einer 2D-Form ein 3D-Volumen zu erstellen: "linear_extrude()" und "rotate_extrude()".
Die lineare Extrusion ähnelt dem Durchpressen von Knetmasse (Play-Doh) durch eine Form – das Ergebnis hat überall denselben Querschnitt.

Die rotationssymmetrische Extrusion hingegen entspricht dem Drechseln oder „Töpfern“ auf einer Töpferscheibe.
Beide Extrusionsmethoden arbeiten mit einer (auch nicht zusammenhängenden) 2D-Form, die sich in der X-Y-Ebene befindet. Obwohl Transformationen 2D-Formen auch außerhalb dieser Ebene platzieren können, wird beim Extrudieren jede Z-Koordinate ignoriert – es erfolgt also implizit eine Projektion auf die X-Y-Ebene. Daher solltest du Extrusionen stets nur auf Formen anwenden, die strikt in der X-Y-Ebene liegen.
linear_extrude
[Bearbeiten]Die lineare Extrusion nimmt eine 2D-Form als Eingabe und erzeugt daraus ein 3D-Objekt.
Die Extrusion erfolgt standardmäßig entlang des Z-Vektors. Ab Version > 2021.01 kannst du mit dem Parameter "v" eine benutzerdefinierte Richtung angeben.
Wichtig: Die Extrusion basiert immer auf dem Schatten (der Projektion) der 2D-Form auf die X-Y-Ebene. Wenn du die Form vor der Extrusion drehst oder verschiebst, wird nur ihr projizierter Umriss extrudiert.
Obwohl die Extrusion gerade verläuft, gibt es zwei zusätzliche Parameter:
- "twist": dreht die Form während der Extrusion (z. B. für spiralförmige Säulen),
- "scale": vergrößert oder verkleinert die Form entlang der Extrusionshöhe (z. B. für konische oder trichterförmige Objekte).
Verwendung
[Bearbeiten]linear_extrude(height = 5, v = [0, 0, 1], center = true, convexity = 10, twist = -fanrot, slices = 20, scale = 1.0, $fn = 16) {...}
Aufgrund von Abwärtskompatibilität müssen alle Parameter namentlich angegeben werden.
- height : Extrusionshöhe (muss positiv sein).
- center : Bei "true" wird das Objekt um den Ursprung zentriert (Z von "-height/2" bis "+height/2").
- twist : Drehung in Grad während der Extrusion (linkshändige Regel).
- scale : Skalierungsfaktor am oberen Ende (Skalar oder Vektor "[x,y]").
- slices : Anzahl der Zwischenschritte entlang der Höhe (ähnlich wie "$fn", wirkt aber nicht auf die 2D-Form).
- segments : Fügt zusätzliche Punkte auf Polygonkanten hinzu – besonders nützlich bei gedrehten Formen. Muss ein Vielfaches der Kantenzahl sein, um Wirkung zu zeigen.
- convexity : Hilft bei der korrekten Darstellung komplexer Formen in der Vorschau. Bei transparent wirkenden Stellen probiere z. B. "convexity = 10".
Der Parameter "v" ist ein 3D-Vektor, der in positive Z-Richtung zeigen muss Vorlage:Requires. "$fn" ist optional und steuert die Feinheit der Extrusion (höher = glatter, aber langsamer).
Falls die Extrusion bei komplexen 2D-Formen fehlschlägt, hilft oft das Setzen von "convexity = 10".
Twist (Verdrillung)
[Bearbeiten]Der "twist"-Parameter gibt an, um wie viele Grad die Form während der Extrusion gedreht wird. "twist = 360" bedeutet eine volle Umdrehung. Die Drehrichtung folgt der Linkshänder-Regel.
linear_extrude(height = 10, center = true, convexity = 10, twist = 0)
translate([2, 0, 0])
circle(r = 1);
linear_extrude(height = 10, center = true, convexity = 10, twist = -100)
translate([2, 0, 0])
circle(r = 1);
linear_extrude(height = 10, center = true, convexity = 10, twist = 100)
translate([2, 0, 0])
circle(r = 1);
linear_extrude(height = 10, center = true, convexity = 10, twist = -500)
translate([2, 0, 0])
circle(r = 1);
Zentrierung ("center")
[Bearbeiten]Wie beim "cylinder":
- "center = false" → Z reicht von 0 bis "height"
- "center = true" → Z reicht von "-height/2" bis "+height/2"
linear_extrude(height = 10, center = true, convexity = 10, twist = -500)
translate([2, 0, 0])
circle(r = 1);
linear_extrude(height = 10, center = false, convexity = 10, twist = -500)
translate([2, 0, 0])
circle(r = 1);
Netzverfeinerung
[Bearbeiten]"slices" legt die Anzahl der Zwischenstufen entlang der Z-Achse fest. Der Standardwert steigt mit "twist". Explizites Setzen verbessert oft das Ergebnis.
"segments" fügt zusätzliche Punkte auf den Kanten des Polygons hinzu – besonders bei verdrehten Geometrien sinnvoll. Beispiel: Für "circle($fn=3)" wirken nur Vielfache von 3 (z. B. 6, 9…); für "square()" Vielfache von 4 (8, 12…).
linear_extrude(height = 10, center = false, convexity = 10, twist = 360, slices = 100)
translate([2, 0, 0])
circle(r = 1);
Die Spezialvariablen "$fn", "$fs" und "$fa" beeinflussen ebenfalls die Auflösung. Ohne "slices" wird der Wert von "$fn" übernommen.
linear_extrude(height = 10, center = false, convexity = 10, twist = 360, $fn = 100)
translate([2, 0, 0])
circle(r = 1);
Skalierung ("scale")
[Bearbeiten]"scale" kann ein Skalar oder ein 2D-Vektor "[x,y]" sein:
linear_extrude(height = 10, center = true, convexity = 10, scale=3)
translate([2, 0, 0])
circle(r = 1);
linear_extrude(height = 10, center = true, convexity = 10, scale=[1,5], $fn=100)
translate([2, 0, 0])
circle(r = 1);
Achtung: Bei vektoriellem "scale" können die Seitenwände nicht eben sein. Um Asymmetrien zu vermeiden (siehe [[1]]), verwende "twist=0" und setze "slices" explizit:
linear_extrude(height=10, scale=[1,0.1], slices=20, twist=0)
polygon(points=[[0,0],[20,10],[20,-10]]);
Verwendung mit importiertem SVG
[Bearbeiten]Häufig wird "linear_extrude()" genutzt, um 2D-SVG-Dateien in 3D-Modelle zu verwandeln:
linear_extrude(height = 10, center = true)
import("knight.svg");
rotate_extrude
[Bearbeiten]Die rotationssymmetrische Extrusion dreht eine 2D-Form um die Z-Achse, um ein rotationssymmetrisches Volumen zu erzeugen.
Stell dir eine Töpferscheibe in der X-Y-Ebene vor, deren Achse nach +Z zeigt. Die 2D-Form ist der Querschnitt des zu erstellenden Objekts – aber nur der Teil mit X ≥ 0 (rechte Hälfte). Diese Form wird um die Z-Achse gedreht.
Alternativ: Die Form wird um die Y-Achse gedreht, und das Ergebnis wird so platziert, dass seine Rotationsachse entlang der Z-Achse liegt.
Wie bei "linear_extrude" wird auch hier nur die Projektion auf die X-Y-Ebene berücksichtigt. Transformationen vor der Extrusion beeinflussen diese Projektion:
- Verschiebung in Z: keine Wirkung
- Verschiebung in X: vergrößert den Durchmesser
- Verschiebung in Y: verschiebt das Objekt in Z-Richtung
- Drehung um X/Y: verzerrt den Querschnitt
Wichtig: Die 2D-Form muss vollständig auf einer Seite der Y-Achse liegen – also entweder alle Punkte mit "x ≥ 0" oder alle mit "x ≤ 0". Berührt die Form die Y-Achse ("x = 0"), muss es eine Linie, nicht nur ein Punkt sein – sonst entsteht ein Objekt mit Dicke 0, was ungültig ist.
Verwendung
[Bearbeiten]rotate_extrude(angle = 360, start=0, convexity = 2) {...}

In Versionen bis 2021.01 müssen Parameter namentlich angegeben werden.
- angle Vorlage:Requires : Standardwert 360°. Gibt an, wie weit gedreht wird (von der positiven X-Achse aus, im Gegenuhrzeigersinn gemäß Rechte-Hand-Regel). Negative Werte drehen im Uhrzeigersinn.
- start Vorlage:Requires : Startwinkel (Standard: 0°, wenn "angle" gesetzt ist; sonst 180°).
- convexity : Wie bei "linear_extrude" – bei Darstellungsproblemen "convexity = 10" probieren.
Die Kreisauflösung wird wie üblich über "$fa", "$fs" und "$fn" gesteuert.
Beispiele
[Bearbeiten]Einfacher Torus:
rotate_extrude(convexity = 10)
translate([2, 0, 0])
circle(r = 1);

Netzverfeinerung
[Bearbeiten]Höhere Fragmentanzahl = bessere Qualität, aber längere Renderzeit:
rotate_extrude(convexity = 10)
translate([2, 0, 0])
circle(r = 1, $fn = 100);

Oder erhöhe die Auflösung der Extrusion selbst:
rotate_extrude(convexity = 10, $fn = 100)
translate([2, 0, 0])
circle(r = 1, $fn = 100);

Extrusion eines Polygons
[Bearbeiten]Auch benutzerdefinierte Polygone lassen sich extrudieren:
// Nur zur Ansicht (gedreht):
rotate([90,0,0]) polygon(points=[[0,0],[2,1],[1,2],[1,3],[3,4],[0,5]]);
// Rotationsextrusion:
rotate_extrude($fn=200) polygon(points=[[0,0],[2,1],[1,2],[1,3],[3,4],[0,5]]);

Mehr zu Polygonen findest du unter 2D-Grundformen: Polygon.
Kombinierte Extrusionen
[Bearbeiten]Mit dem "angle"-Parameter (ab 2019.05) lässt sich z. B. ein Haken modellieren:
eps = 0.01;
translate([eps, 60, 0])
rotate_extrude(angle=270, convexity=10)
translate([40, 0]) circle(10);
rotate_extrude(angle=90, convexity=10)
translate([20, 0]) circle(10);
translate([20, eps, 0])
rotate([90, 0, 0]) cylinder(r=10, h=80+eps);
Ausrichtung
[Bearbeiten]Bei vollständiger Rotation ("angle = 360") spielt der Startpunkt normalerweise keine Rolle – außer, du nutzt "$fn", um ein Prisma mit fester Kantenzahl zu erzeugen.
- Ohne "angle"-Angabe (bzw. in Versionen ≤ 2021.01 mit "angle=360"): Start entlang der negativen X-Achse → bei ungerader Kantenzahl liegt eine Ecke links.
- Mit expliziter "angle=360" (ab Development Snapshot): Start entlang der positiven X-Achse → konsistent mit anderen runden Grundformen.
In Zukunft könnte sich das Verhalten ändern, sodass der Start immer auf der positiven X-Achse liegt.
Der Parameter "start" (Vorlage:Requires) gibt den Startwinkel direkt an.