Program Control in OpenSCAD
The first thing to know about OpenSCAD is that it is not an “iterative” language. When OpenSCAD “loops” though the for statement it basically creates an object for each of the items. There is no interrelation between the items or variables.
Official Wiki Page: for loop
Basic Syntax
for ( variable = [start :increment:end] )
When the for loop is evaluated the “variable” will be assigned values equal to start, then the next value of start + increment, until start + increment > end
the for statement is an operator, so it will need something to operate on
Single Child Form
The single child form below will result in 10 cubes, starting in size from 1 ( for all sides ) through 10. However, only the final cube we be visible as the largest cube covers the previous nine.
In the example the variable i , is replaced with the values 1,2,3,4,5,6,7,8,9,10 and a cube is created for each of the values.
for ( i = [1:1:10])
cube( i );
Single Child with an Action
We can add an action to make all the cubes visible by transforming each subsequent cube. The following code will produce cubes of varying sizes, that are also moved placed on the axis by the value of i
for ( i = [1:1:10])
translate([i,0,0])
cube(i);
Operating on Multiple Children
A single operation can work on multiple actions and children. This code creates two sets of 10 cubes. On set growing and moving in the positive X axis, the other set in the negative X Axis.
for ( i = [1:1:10]) {
translate([i,0,0])
cube(i);
translate([-i-i,0,0])
cube(i);
}
Note: Because cubes are always drawn in the XYZ Positive direction, this code subtracts the dimension of the cube in order to move it the correct amount in the negative direction.
The for loop is powerful and can contain multiple actions, objects and other operations.
Coming Soon !
Three forms of the for loop
Standard Form
for ( i = [start:stop] );
Increment Form
for ( i = [start:increment:stop] );
As a list iterator
for ( i = [1,6,4,10,9,99,100] );
Using the for-loop with a rotation
If we use the variable assigned in the for loop, we can create multiples of the child object ( in this case a sphere ). It is useful to note that the “child object” is any geometry within the rotate scope. The scope is either a single geometry following the rotate modifier or multiple geometries within the brackets.
for ( i = [1:10:360]) rotate(i,[0,0,1]){ translate([10,0,0]) sphere([1],$fn=25); }