OpenSCAD für Anfänger · Teil 11TutorialEinsteiger

OpenSCAD

OpenSCAD für Anfänger – Teil 11: Entscheidungen mit if()

Steuere Modellvarianten mit if() und else, verknüpfe Bedingungen und ergänze eine Montageplatte um optionale Bohrungen.

Veröffentlicht am · Aktualisiert am

4 Minuten Lesezeit · 1 PDF-Download

Mit if und else steuerst du in OpenSCAD, welche Geometrien ein Modell enthält. Dieses Tutorial zeigt dir boolesche Werte, Vergleiche und eine Montageplatte, deren Mittelbohrung du über einen Parameter ein- und ausschaltest.

Voraussetzungen

Du brauchst OpenSCAD und die Grundlagen aus Teil 10 des Kurses.

Kapitel 3 – OpenSCAD automatisieren

Im vorherigen Teil haben wir mit for() gelernt, wiederkehrende Geometrien automatisch zu erzeugen.

Jetzt gehen wir einen Schritt weiter.

Unsere Modelle sollen abhängig von bestimmten Einstellungen unterschiedliche Geometrien erzeugen können.

Dafür verwenden wir:

if();

und bei Bedarf:

else

Damit können wir beispielsweise:

  • Bohrungen ein- oder ausschalten

  • unterschiedliche Modellvarianten erzeugen

  • Verstärkungen optional hinzufügen

  • Beschriftungen einblenden

  • Geometrien von bestimmten Größen abhängig machen

Lernziel:
Nach dieser Lektion kannst du mit if() einfache Entscheidungen in OpenSCAD treffen und optionale Geometrien erzeugen.


OpenSCAD if: Geometrie abhängig von Bedingungen erzeugen

Ein einfaches Beispiel:

mit_bohrung = true;

if (mit_bohrung)
    cylinder(
        h=10,
        d=5
    );

Die Variable:

mit_bohrung

besitzt den Wert:

true

Deshalb wird der Zylinder erzeugt.

Ändern wir:

mit_bohrung = false;

wird der Zylinder nicht erzeugt.


Boolesche Werte

Für einfache Ein/Aus-Entscheidungen stehen zwei Werte zur Verfügung:

Wert Bedeutung
true wahr / aktiviert
false falsch / deaktiviert

Solche Parameter eignen sich besonders gut für optionale Modellfunktionen.

Beispielsweise:

mit_bohrungen = true;
mit_text = false;
mit_verstaerkung = true;

Optionale Geometrie

Beispiel:

mit_aufsatz = true;

cube([40, 30, 5]);

if (mit_aufsatz)
    translate([
        10,
        5,
        5
    ])
        cube([
            20,
            20,
            10
        ]);

Ist mit_aufsatz auf false gesetzt, bleibt nur die Grundplatte übrig.


if() mit difference()

Besonders praktisch ist if() bei optionalen Bohrungen.

mit_bohrung = true;

difference() {

    cube([
        40,
        30,
        10
    ]);

    if (mit_bohrung)
        translate([
            20,
            15,
            -1
        ])
            cylinder(
                h=12,
                d=8,
                $fn=64
            );
}

Bei:

mit_bohrung = true;

entsteht die Bohrung.

Bei:

mit_bohrung = false;

bleibt der Quader geschlossen.


Werte vergleichen

Eine Bedingung kann auch einen Vergleich enthalten.

Beispiel:

breite = 80;

if (breite > 60)
    cube([20, 20, 10]);

Die Geometrie wird nur erzeugt, wenn die Breite größer als 60 ist.


Vergleichsoperatoren

Die wichtigsten Operatoren:

Operator Bedeutung
== gleich
!= ungleich
> größer als
< kleiner als
>= größer oder gleich
<= kleiner oder gleich

Wichtig ist der Unterschied zwischen:

=

und:

==

Ein einzelnes Gleichheitszeichen weist einen Wert zu:

breite = 80;

Zwei Gleichheitszeichen vergleichen Werte:

if (breite == 80)

Zwei Varianten mit if/else

Soll zwischen zwei Möglichkeiten gewählt werden, kann else verwendet werden:

variante = 1;

if (variante == 1)
    cube([40, 30, 5]);

else
    cylinder(
        h=5,
        d=30,
        $fn=64
    );

Bei variante = 1 wird der Quader erzeugt.

Bei allen anderen Werten wird der Zylinder erzeugt.


Mehrere Varianten

Auch mehrere Bedingungen können kombiniert werden:

variante = 2;

if (variante == 1)
    cube([40, 30, 5]);

else if (variante == 2)
    cylinder(
        h=10,
        d=30,
        $fn=64
    );

else
    sphere(
        d=30,
        $fn=64
    );

Damit können Modelle unterschiedliche Varianten aus demselben Quelltext erzeugen.


Praxisprojekt: Montageplatte mit optionaler Mittelbohrung

Wir verwenden wieder die Montageplatte aus Teil 10.

Die vier Befestigungsbohrungen bleiben immer erhalten.

Eine zusätzliche zentrale Bohrung soll optional ein- oder ausgeschaltet werden können.

Parameter

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

bohrung_d = 6;

rand_x = 12;
rand_y = 12;

mit_mittelbohrung = true;
mittelbohrung_d = 20;

ueberstand = 1;

Bohrungspositionen

x_pos = [
    rand_x,
    breite - rand_x
];

y_pos = [
    rand_y,
    tiefe - rand_y
];

Die vier Befestigungsbohrungen werden wieder mit den Schleifen aus Teil 10 erzeugt.


Optionale Mittelbohrung

if (mit_mittelbohrung)
    translate([
        breite / 2,
        tiefe / 2,
        -ueberstand
    ])
        cylinder(
            h=dicke + 2 * ueberstand,
            d=mittelbohrung_d,
            $fn=64
        );

Die Mittelbohrung wird nur erzeugt, wenn:

mit_mittelbohrung = true;

gesetzt ist.


Vollständiges Modell

// -------------------------
// Parameter
// -------------------------

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

bohrung_d = 6;

rand_x = 12;
rand_y = 12;

mit_mittelbohrung = true;
mittelbohrung_d = 20;

ueberstand = 1;

// -------------------------
// Berechnungen
// -------------------------

x_pos = [
    rand_x,
    breite - rand_x
];

y_pos = [
    rand_y,
    tiefe - rand_y
];

// -------------------------
// Modell
// -------------------------

difference() {

    cube([
        breite,
        tiefe,
        dicke
    ]);

    // Befestigungsbohrungen
    for (x = x_pos)
        for (y = y_pos)
            translate([
                x,
                y,
                -ueberstand
            ])
                cylinder(
                    h=dicke + 2 * ueberstand,
                    d=bohrung_d,
                    $fn=64
                );

    // optionale Mittelbohrung
    if (mit_mittelbohrung)
        translate([
            breite / 2,
            tiefe / 2,
            -ueberstand
        ])
            cylinder(
                h=dicke + 2 * ueberstand,
                d=mittelbohrung_d,
                $fn=64
            );
}

Bedingungen kombinieren

Mehrere Bedingungen können logisch verknüpft werden.

UND

if (mit_verstaerkung && dicke >= 5)

Beide Bedingungen müssen erfüllt sein.

ODER

if (variante == 1 || variante == 2)

Mindestens eine der Bedingungen muss erfüllt sein.

Für einfache Einsteigermodelle sind diese Verknüpfungen noch nicht zwingend notwendig, werden bei komplexeren Modellen aber schnell nützlich.


Mitmach-Aufgabe

Erweitere die Lochplatte aus Teil 10 um eine optionale Mittelbohrung.

Grundplatte

Parameter Wert
Breite 100 mm
Tiefe 60 mm
Dicke 5 mm
Bohrungsdurchmesser 5 mm
X-Positionen 10–90 mm in 20-mm-Schritten
Y-Positionen 15 mm und 45 mm

Option

Parameter Wert
Mittelbohrung ein-/ausschaltbar
Durchmesser 16 mm

Verwende:

for()
if()
difference()

Musterlösung

breite = 100;
tiefe = 60;
dicke = 5;

bohrung_d = 5;

x_pos = [10:20:90];
y_pos = [15, 45];

mit_mittelbohrung = true;
mittelbohrung_d = 16;

ueberstand = 1;

difference() {

    cube([
        breite,
        tiefe,
        dicke
    ]);

    // Lochraster
    for (x = x_pos)
        for (y = y_pos)
            translate([
                x,
                y,
                -ueberstand
            ])
                cylinder(
                    h=dicke + 2 * ueberstand,
                    d=bohrung_d,
                    $fn=64
                );

    // optionale Mittelbohrung
    if (mit_mittelbohrung)
        translate([
            breite / 2,
            tiefe / 2,
            -ueberstand
        ])
            cylinder(
                h=dicke + 2 * ueberstand,
                d=mittelbohrung_d,
                $fn=64
            );
}

Was haben wir gelernt?

Mit if() kann OpenSCAD abhängig von Bedingungen entscheiden, ob Geometrie erzeugt wird.

Wir kennen jetzt:

if()
else

sowie die booleschen Werte:

true
false

und die wichtigsten Vergleichsoperatoren:

==
!=
>
<
>=
<=

Damit können Modelle nicht nur unterschiedliche Maße besitzen, sondern auch unterschiedliche Funktionen und Ausstattungsvarianten.


Im nächsten Teil

Im nächsten Teil beschäftigen wir uns mit eigenen Modulen.

Mit:

module

können wir eigene wiederverwendbare Bauteile und Befehle erstellen.

Statt dieselbe Geometrie mehrfach auszuschreiben, können wir beispielsweise einen eigenen Befehl für eine Bohrung, einen Abstandshalter oder eine komplette Halterung definieren.

Damit wird unser OpenSCAD-Code deutlich strukturierter und wiederverwendbarer.


Häufige Fragen

Wie schalte ich eine Bohrung mit einem Parameter ein?

Lege einen booleschen Parameter wie mit_mittelbohrung = true; an. Innerhalb von difference() erzeugst du den Schneidzylinder nur dann, wenn if (mit_mittelbohrung) erfüllt ist.

Was unterscheidet = von == in OpenSCAD?

Mit = weist du einen Wert zu, etwa breite = 100;. Mit == vergleichst du zwei Werte in einer Bedingung, etwa if (breite == 100).

Passendes Cheatsheet

Im Cheatsheet „Schleifen, Bedingungen und Module“ findest du ergänzende Grundlagen zum Nachschlagen. Du kannst das Cheatsheet auch direkt als PDF herunterladen.

Weiterlernen