Programmieren mit OpenSCAD
OpenSCAD als Programmiersprache
Wie du bisher gesehen hast, hat OpenSCAD ähnliche Strukturen wie eine Programmiersprache.
Aufgabe: Was kennst du schon?
Welche programmiersprachlichen Elemente gibt es auch in OpenSCAD? Schreibe in das jeweilige Kästchen die richtige Antwort.
Kontrollstruktur: Wiederholung
Die folgenden Darstellungen sind beweglich - probiere es aus!
Eine weitere Kontrollstruktur, die es in OpenSCAD gibt, taucht in der Aufgabe oben noch nicht auf, weil wir sie bisher noch nicht hatten: Wiederholungen
Einfache Wiederholungen
Mit for(variable=[startwert:schrittweite:endwert])
kann man eine Wiederholung erzeugen. Ist die Schrittweite 1, dann kann man diesen Wert auch weglassen.
Durch folgenden Code werden somit nebeneinander 10 Zylinder erzeugt. Die Variable i
wird auch als Laufvariable bezeichnet. Sie nimmt nacheinander alle Werte von 0 bis 10 an, so dass insgesamt 11 Zylinder erzeugt werden, die erst um 0 in x-Richtung, dann um 1 in x-Richtung, dann um 2 in x-Richtung, ... und schließlich um 10 in x-Richtung verschoben werden.
for(i=[0:10]){
translate([i,0,0])cylinder(h=1, r=0.4);
}
Durch folgenden Code wird von den 11 Zylindern nur jeder Dritte erzeugt - genauer: Die Zylinder, die verschoben wurden um 0, um 3, um 6 und um 9.
for(i=[0:3:10]){
translate([i,0,0])cylinder(h=1, r=0.4);
}
Die Laufvariable kann nicht nur für die Verschiebung sondern z.B. auch für Größenänderungen verwendet werden. Der folgende Code erzeugt größer werdende Zylinder auf dem Graphen einer Potenzfunktion 4. Grades.
for (i=[1:6]){
translate([i*2.9,0.01*i^4,0]) cylinder(h=0.5*i, r=0.3*i);
}
Verschachtelte Wiederholungen
Wenn du Wiederholungen verschachtelst, dann kannst du "Wiederholungen wiederholen". Dadurch entsteht in unserem Fall ein Quadrat aus lauter Zylindern. (Beachte, dass OpenSCAD beim Rendern jetzt ganz schön viel zu tun hat und das Rendern ziemlich lange benötigt...)
for(i=[0:10]){
for (j=[0:10]){
translate([i,j,0]) cylinder(h=1, r=0.4);
}
}
Kontrollstruktur: Bedingung
Eine weitere Kontrollstruktur, die du bereits aus der Programmierung kennst: Bedingungen. Sie können z.B. innerhalb einer Wiederholung sinnvoll sein.
Wenn du aus dem "Zylinder-Quadrat" oben die Diagonale entfernen möchtest, dann kannst du mit einem vorgeschalteten if(i!=j)
dafür sorgen, dass nur die Zylinder dargestellt werden, bei denen nicht i=j gilt.
for(i=[0:10]){
for (j=[0:10]){
if(i!=j) translate([i,j,0]) cylinder(h=1, r=0.4);
}
}