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 mitif()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.
