Title: 2.12. Loops 2.12. Schleifen
Course: Library of Things >> Part 1: OpenSCAD Basics Library of Things >> Teil 1: Basiskurs in OpenSCAD > Section: 2. First steps 2. Erste Schritte

- Loops are Iterator Functions used as an operator in OpenSCAD (no semicolons)
- A for() loop evaluate each value in a range of vectors, applying it to the following action
- It builds a tree of objects, one branch for each time
- Default syntax of for() is:

for(variable=[start:incement:end]) {action() object();} or action;

for(variable=[start:end]) {action() object();} or action;

for(variable=[vector]) {action() object();} or action;

- Parameters of for() are:

start >> Initial value (Integer)

increment >> Amount to increase the value (optional Integer - default=1)

end >> Stop when next value would be past end

- An intersection_for() loop iterates over the values in a range of vector and create the intersection of objects created by each pass
- Besides creating separate instances for each pass, the standard for() also groups all these instances
- Creating an implicit union, while intersection_for() works around the implicit union getting a result.
- By using a combination of the standard for() and intersection() statements
- intersection_for() loop uses the same parameters then for() loop

Loops: Iteration over a vector of vectors (rotation):

for(i=[[0, 0, 0], [10, 20, 300], [200, 40, 57], [20, 88, 57]]) {

    rotate(i)

    cube([100, 20, 20], center=true);

}

Loops: Iteration over a vector of vectors (translation)

for(i=[[0, 0, 0], [10, 12, 10], [20, 24, 20], [30, 36, 30], [20, 48, 40], [10, 60, 50]]) {

    translate(i)

    cube([50, 15, 10], center=true);

}

Intersection loop 1:

Loop over a range with a cutout of overlapping translated spheres as a result

intersection_for(n=[1:6]) {

    rotate([0, 0, n*60])

    translate([20, 0, 0])

    sphere(r=40);

}

Intersection loop 2:

Loop over a range with a cutout of overlapping rotated blocks as a result

intersection_for(i=[[0, 0, 0], [10, 20, 300], [200, 40, 57], [20, 88, 57]]) {

    rotate(i)

    cube([200, 40, 40], center=true);

}

- Schleifen sind Iteratorfunktionen, die als Operator in OpenSCAD verwendet werden (keine Semikolons).
- Eine for()-Schleife wertet jeden Wert in einem Bereich von Vektoren aus und wendet ihn auf die folgende Aktion an.
- Es erstellt einen Baum von Objekten, einen Zweig für jedes Mal.
- Die Standardsyntax von for() ist:

for(variable=[start:incement:end]) {action() object();} or action;

for(variable=[start:end]) {action() object();} or action;

for(variable=[vector]) {action() object();} or action;

- Parameter von for() sind:

start >> Ursprünglicher Wert (Ganzzahl)

increment >>  Betrag, um den Wert zu erhöhen (optional, Standard=1)

end >> Stoppen, wenn der nächste Wert nach dem Ende wäre

- Eine Intersektion_for()-Schleife iteriert über die Werte in einem Vektorbereich und erzeugt die Schnittmenge von Objekten, die bei jedem Durchlauf erzeugt werden.
- Abgesehen davon, dass für jeden Durchgang separate Instanzen erstellt werden, gruppiert der Standard for() auch alle diese Instanzen.
- Erstellen einer impliziten Union, während section_for() die implizite Union umgeht, um ein Ergebnis zu erhalten.
- Indem Sie eine Kombination der standardmäßigen for()- und Kreuzung()-Anweisungen verwenden
- interface_for()-Schleife verwendet dieselben Parameter wie die for()-Schleife

Schleifen: Iteration über einen Vektor von Vektoren (Rotation):

for(i=[[0, 0, 0], [10, 20, 300], [200, 40, 57], [20, 88, 57]]) {

    rotate(i)

    cube([100, 20, 20], center=true);

}

Schleifen: Iteration über einen Vektor von Vektoren (Translation)

for(i=[[0, 0, 0], [10, 12, 10], [20, 24, 20], [30, 36, 30], [20, 48, 40], [10, 60, 50]]) {

    translate(i)

    cube([50, 15, 10], center=true);

}

Schnittschleife 1:

Schleife über einen Bereich mit einem Ausschnitt aus überlappenden übersetzten Kugeln als Ergebnis:

intersection_for(n=[1:6]) {

    rotate([0, 0, n*60])

    translate([20, 0, 0])

    sphere(r=40);

}

Schnittschleife 2:

Schleife über einen Bereich mit einem Ausschnitt aus überlappenden gedrehten Blöcken als Ergebnis:

intersection_for(i=[[0, 0, 0], [10, 20, 300], [200, 40, 57], [20, 88, 57]]) {

    rotate(i)

    cube([200, 40, 40], center=true);

}