Mit einer for-Schleife wiederholst du in OpenSCAD Geometrien an mehreren Positionen. Du lernst Wertebereiche und Listen kennen und erstellst daraus Lochreihen sowie ein zweidimensionales Bohrungsraster.
Voraussetzungen
Du brauchst OpenSCAD und die Grundlagen aus Teil 9 des Kurses.
Kapitel 3 – OpenSCAD automatisieren
Mit diesem Teil beginnt das dritte Kapitel unseres OpenSCAD-Kurses.
Bisher haben wir Geometrien hauptsächlich einzeln beschrieben.
Bei wiederkehrenden Elementen führt das schnell zu doppeltem Code.
Mit:
for()
kann OpenSCAD eine Anweisung automatisch mehrfach ausführen.
Lernziel:
Nach dieser Lektion kannst du mitfor()einfache Reihen und Raster erzeugen und wiederkehrende Geometrien deutlich kompakter beschreiben.
Die erste for-Schleife in OpenSCAD
for (x = [0, 20, 40, 60])
translate([x, 0, 0])
cube([10, 10, 10]);
OpenSCAD erzeugt vier Würfel.
Die Variable x nimmt nacheinander folgende Werte an:
0
20
40
60
Bereiche verwenden
Die gleiche Folge kann kompakter geschrieben werden:
for (x = [0:20:60])
translate([x, 0, 0])
cube([10, 10, 10]);
Die Syntax lautet:
[start : schrittweite : ende]
Beispiel:
[0:10:50]
ergibt:
0, 10, 20, 30, 40, 50
Lochreihe erzeugen
difference() {
cube([100, 40, 5]);
for (x = [10:20:90])
translate([x, 20, -1])
cylinder(
h=7,
d=5,
$fn=64
);
}
Mit nur einem Zylinderbefehl entstehen mehrere Bohrungen.
Werte parametrisch definieren
breite = 100;
tiefe = 40;
dicke = 5;
bohrung_d = 5;
start_x = 10;
abstand = 20;
ende_x = 90;
Dann:
for (x = [start_x:abstand:ende_x])
Damit lässt sich beispielsweise der Abstand aller Bohrungen über einen einzigen Parameter verändern.
Verschachtelte Schleifen
Besonders leistungsfähig wird for(), wenn mehrere Schleifen kombiniert werden.
for (x = [10, 90])
for (y = [10, 50])
translate([x, y, -1])
cylinder(
h=7,
d=5,
$fn=64
);
Die Kombinationen sind:
10 / 10
10 / 50
90 / 10
90 / 50
Dadurch entstehen vier Bohrungen.
Montageplatte aus Teil 9 verbessern
In Teil 9 haben wir vier Bohrungen einzeln erzeugt.
Jetzt definieren wir ihre Positionen als Listen:
x_pos = [
rand_x,
breite - rand_x
];
y_pos = [
rand_y,
tiefe - rand_y
];
Dann:
for (x = x_pos)
for (y = y_pos)
translate([x, y, -ueberstand])
cylinder(
h=dicke + 2 * ueberstand,
d=bohrung_d,
$fn=64
);
Damit ersetzt ein einziger Zylinder vier einzelne Codeblöcke.
Vollständige Montageplatte
breite = 120;
tiefe = 70;
dicke = 5;
bohrung_d = 6;
rand_x = 12;
rand_y = 12;
ueberstand = 1;
x_pos = [
rand_x,
breite - rand_x
];
y_pos = [
rand_y,
tiefe - rand_y
];
difference() {
cube([
breite,
tiefe,
dicke
]);
for (x = x_pos)
for (y = y_pos)
translate([
x,
y,
-ueberstand
])
cylinder(
h=dicke + 2 * ueberstand,
d=bohrung_d,
$fn=64
);
}
Lochraster erzeugen
Mit zwei Bereichen können ganze Raster entstehen:
for (x = [10:20:90])
for (y = [10:20:50])
translate([x, y, 0])
cylinder(
h=5,
d=4,
$fn=32
);
Damit lassen sich beispielsweise erzeugen:
-
Lochplatten
-
Lüftungsgitter
-
Montageraster
-
Noppen
-
Stifte
-
wiederkehrende Strukturen
Mitmach-Aufgabe
Erstelle eine Lochplatte mit:
| Parameter | Wert |
|---|---|
| Breite | 100 mm |
| Tiefe | 60 mm |
| Dicke | 5 mm |
| Bohrungsdurchmesser | 5 mm |
| X-Positionen | 10 bis 90 mm in 20-mm-Schritten |
| Y-Positionen | 15 mm und 45 mm |
Musterlösung
breite = 100;
tiefe = 60;
dicke = 5;
bohrung_d = 5;
ueberstand = 1;
x_pos = [10:20:90];
y_pos = [15, 45];
difference() {
cube([
breite,
tiefe,
dicke
]);
for (x = x_pos)
for (y = y_pos)
translate([
x,
y,
-ueberstand
])
cylinder(
h=dicke + 2 * ueberstand,
d=bohrung_d,
$fn=64
);
}
Was haben wir gelernt?
Mit for() können wir:
-
Code automatisch wiederholen
-
feste Listen durchlaufen
-
Bereiche mit Start, Schrittweite und Ende erzeugen
-
Lochreihen erstellen
-
verschachtelte Schleifen verwenden
-
zweidimensionale Raster erzeugen
-
parametrische Modelle deutlich kompakter schreiben
Damit beginnt OpenSCAD, nicht mehr nur wie ein textbasiertes CAD-System zu wirken, sondern auch wie ein kleines Werkzeug zur automatisierten Konstruktion.
Im nächsten Teil
Im nächsten Teil lernen wir:
if()
Damit können wir Entscheidungen in unser Modell einbauen.
Beispielsweise:
-
Bohrung ein- oder ausschalten
-
Beschriftung optional erzeugen
-
zwischen verschiedenen Varianten wählen
-
zusätzliche Verstärkungen nur bei Bedarf anzeigen
Häufige Fragen
Wie definiere ich den Abstand einer Lochreihe?
Verwende einen Wertebereich wie [0 : 20 : 100]: Der mittlere Wert ist die Schrittweite. Hier entstehen Positionen von 0 bis 100 in Abständen von 20 Modelleinheiten.
Wie erzeuge ich mit for ein zweidimensionales Lochraster?
Verschachtele eine Schleife für die X-Positionen mit einer Schleife für die Y-Positionen. Mit translate([x, y, z]) positionierst du den Schneidkörper an jeder Kombination der beiden Koordinaten.
Passendes Cheatsheet
Im Cheatsheet „Schleifen, Bedingungen und Module“ findest du ergänzende Grundlagen zum Nachschlagen. Du kannst das Cheatsheet auch direkt als PDF herunterladen.
