OpenSCAD für Anfänger · Teil 15TutorialEinsteiger

OpenSCAD

OpenSCAD für Anfänger – Teil 15: Von 2D zu 3D mit linear_extrude() und rotate_extrude()

Extrudiere 2D-Konturen in OpenSCAD: Platten mit linear_extrude(), Ringe und Drehknöpfe mit rotate_extrude(). Mit Codebeispielen und Übung.

Veröffentlicht am

6 Minuten Lesezeit

Extrudiere 2D-Konturen in OpenSCAD: Platten mit linear_extrude(), Ringe und Drehknöpfe mit rotate_extrude(). Mit Codebeispielen und Übung.

Voraussetzungen

Du brauchst OpenSCAD und die Grundlagen aus Teil 14. Die Beispiele verwenden die klassische OpenSCAD-Syntax; eine Ausführung mit einer konkreten Softwareversion wurde hier nicht geprüft. Wir behandeln eine Modelleinheit als einen Millimeter.

Kapitel 4 – Von 2D zu 3D

Im vorherigen Teil haben wir die wichtigsten 2D-Grundformen von OpenSCAD kennengelernt:

square();
circle();
polygon();

Diese Formen besitzen zunächst keine Höhe und liegen nur in der XY-Ebene.

Jetzt machen wir aus diesen Konturen dreidimensionale Bauteile.

Dafür stehen zwei besonders wichtige Befehle zur Verfügung:

linear_extrude();
rotate_extrude();

Lernziel:
Nach dieser Lektion kannst du 2D-Konturen linear extrudieren und um eine Achse rotieren. Damit lassen sich Platten, Profile, Ringe, Knöpfe und viele weitere Bauteile erzeugen.

Was bedeutet Extrusion?

Bei einer Extrusion wird eine zweidimensionale Kontur in eine dritte Dimension erweitert.

Zum Beispiel:

Rechteck → Quader
Kreis → Zylinder
freie Kontur → individueller 3D-Körper

Lineare Extrusion mit linear_extrude()

Ein einfaches Beispiel:

linear_extrude(height=10)
    square([40, 30]);

Das 2D-Rechteck wird 10 mm in Z-Richtung extrudiert.

Das Ergebnis besitzt:

Richtung Größe
X 40 mm
Y 30 mm
Z 10 mm

Parametrische lineare Extrusion

breite = 60;
tiefe = 40;
dicke = 5;

linear_extrude(
    height=dicke
)
    square([
        breite,
        tiefe
    ]);

Auch Extrusionen können also vollständig parametrisch aufgebaut werden.

Komplexe 2D-Konturen extrudieren

Es muss nicht nur eine einzelne Grundform extrudiert werden.

Beispiel:

linear_extrude(height=5)
    difference() {

        square([
            60,
            40
        ]);

        translate([
            30,
            20
        ])
            circle(
                d=20,
                $fn=64
            );
    }

Zuerst wird in 2D ein Kreis aus dem Rechteck ausgeschnitten.

Anschließend wird die komplette Kontur extrudiert.

Verschachtelung verstehen

Der Aufbau:

linear_extrude()
    difference() {
        square();
        circle();
    }

wird von innen nach außen verarbeitet:

1. square()
2. circle()
3. difference()
4. linear_extrude()

Man kann sich den Aufbau als Baum vorstellen:

linear_extrude
└── difference
    ├── square
    └── circle

Montageplatte aus Teil 14 extrudieren

Unsere bekannte 2D-Montageplatte lässt sich direkt in ein 3D-Bauteil überführen:

breite = 120;
tiefe = 70;
dicke = 5;

bohrung_d = 6;

rand_x = 12;
rand_y = 12;

x_pos = [
    rand_x,
    breite - rand_x
];

y_pos = [
    rand_y,
    tiefe - rand_y
];

linear_extrude(
    height=dicke
)
    difference() {

        square([
            breite,
            tiefe
        ]);

        for (x = x_pos)
            for (y = y_pos)
                translate([
                    x,
                    y
                ])
                    circle(
                        d=bohrung_d,
                        $fn=64
                    );
    }

Zentrierte Extrusion

Auch linear_extrude() besitzt einen center-Parameter:

linear_extrude(
    height=10,
    center=true
)
    square(
        [40, 30],
        center=true
    );

Bei:

center=true

wird die Geometrie zur Hälfte in positive und zur Hälfte in negative Z-Richtung extrudiert.

Kontur während der Extrusion verdrehen

Mit twist kann eine Kontur während der Extrusion gedreht werden.

linear_extrude(
    height=40,
    twist=90
)
    square(
        [20, 20],
        center=true
    );

Feinheit mit slices

Bei verdrehten Geometrien kann die Anzahl der Zwischenschritte mit slices beeinflusst werden:

linear_extrude(
    height=40,
    twist=180,
    slices=60
)
    square(
        [20, 20],
        center=true
    );

Ein höherer Wert erzeugt mehr Zwischenstufen.

Skalierung während der Extrusion

Auch eine Größenänderung während der Extrusion ist möglich:

linear_extrude(
    height=30,
    scale=0.5
)
    square(
        [30, 30],
        center=true
    );

Die obere Kontur besitzt nur noch die halbe Größe.

Damit lassen sich beispielsweise konische oder pyramidenähnliche Formen erzeugen.

Rotationskörper mit rotate_extrude()

Die zweite wichtige Extrusionsart lautet:

rotate_extrude();

Hier wird eine zweidimensionale Kontur um die Y-Achse der 2D-Ebene beziehungsweise um die Z-Achse des entstehenden 3D-Körpers rotiert.

Ein einfaches Beispiel:

rotate_extrude($fn=96)
    translate([
        20,
        0
    ])
        square([
            5,
            10
        ]);

Das Ergebnis ist ein ringförmiger Körper.

Abstand zur Rotationsachse

Die Position der 2D-Kontur ist entscheidend.

translate([
    20,
    0
])

verschiebt die Kontur 20 mm von der Rotationsachse weg.

Je größer dieser Wert, desto größer wird der Radius des entstehenden Bauteils.

Parametrischer Ring

innenradius = 20;
wand = 5;
hoehe = 10;

rotate_extrude($fn=96)
    translate([
        innenradius,
        0
    ])
        square([
            wand,
            hoehe
        ]);

Damit lässt sich ein Ring vollständig parametrisch steuern.

Freie Profile mit polygon()

Für komplexere Rotationskörper eignet sich besonders polygon().

Beispiel:

profil = [
    [20, 0],
    [30, 0],
    [28, 10],
    [22, 10]
];

rotate_extrude($fn=96)
    polygon(
        profil
    );

Die Punkteliste beschreibt den Querschnitt des späteren Bauteils.

Typische Anwendungen für rotate_extrude()

Damit lassen sich unter anderem erzeugen:

  • Ringe

  • Buchsen

  • Rollen

  • Knöpfe

  • Räder

  • Scheiben

  • Drehteile

  • rotationssymmetrische Gehäuse

  • einfache Behälter

Praxisprojekt: einfacher Drehknopf

Wir erzeugen einen einfachen konischen Drehknopf.

Parameter

radius_unten = 15;
radius_oben = 13;
hoehe = 12;

achsen_d = 6;
ueberstand = 1;

Profil

profil = [
    [0, 0],
    [radius_unten, 0],
    [radius_oben, hoehe],
    [0, hoehe]
];

Rotationskörper erzeugen

rotate_extrude($fn=96)
    polygon(
        profil
    );

Achsbohrung ergänzen

difference() {

    rotate_extrude($fn=96)
        polygon(
            profil
        );

    translate([
        0,
        0,
        -ueberstand
    ])
        cylinder(
            h=hoehe + 2 * ueberstand,
            d=achsen_d,
            $fn=64
        );
}

Damit erhält der Drehknopf eine zentrale Bohrung.

linear_extrude() oder rotate_extrude()?

Eine einfache Faustregel:

Befehl Typische Verwendung
linear_extrude() Platten, Schilder, Profile, Flansche
rotate_extrude() Ringe, Rollen, Knöpfe, Buchsen, Drehteile

Mitmach-Aufgabe

Erstelle einen parametrischen Ring.

Vorgaben

Parameter Wert
Innenradius 20 mm
Wandstärke 4 mm
Höhe 8 mm

Verwende:

square()
translate()
rotate_extrude()

Musterlösung

innenradius = 20;
wand = 4;
hoehe = 8;

rotate_extrude($fn=96)
    translate([
        innenradius,
        0
    ])
        square([
            wand,
            hoehe
        ]);

Teste anschließend beispielsweise:

innenradius = 30;

oder:

wand = 8;

Das Modell sollte sich automatisch anpassen.

Was haben wir gelernt?

Wir kennen jetzt zwei wichtige Möglichkeiten, aus 2D-Konturen dreidimensionale Modelle zu erzeugen:

linear_extrude()
rotate_extrude()

Mit linear_extrude() können wir:

  • Konturen eine Höhe geben

  • komplette 2D-Konstruktionen extrudieren

  • Geometrien zentrieren

  • Konturen während der Extrusion verdrehen

  • Konturen skalieren

Mit rotate_extrude() können wir:

  • 2D-Profile rotieren

  • rotationssymmetrische Körper erzeugen

  • freie Profile mit polygon() verwenden

  • technische Drehteile parametrisch modellieren

Damit erweitert sich die Anzahl möglicher OpenSCAD-Konstruktionen erheblich.

Im nächsten Teil

Im nächsten Teil beschäftigen wir uns mit Text.

OpenSCAD besitzt dafür:

text()

In Kombination mit:

linear_extrude()
difference()

können wir daraus:

  • erhabene Beschriftungen

  • Gravuren

  • Namensschilder

  • Typenschilder

  • Markierungen

erzeugen.

Weiterlernen

Referenz

Die OpenSCAD-Sprachreferenz verlinkt die Dokumentation der verwendeten Befehle.