OpenSCAD does not have a built in Array command but we can easily create an array with a for loop, or even create an array module, and have our own command.

If you have not already learned about using for loops in OpenSCAD take a look at this tutorial:

## Linear Array with a For Loop

To create a linear array in OpenSCAD is pretty straight forward. The measurements will be embedded in the Step and End values of the Loop.

Normally a basic forloop in OpenSCAD looks like this

for ( i=[start:count:end] )

But for our linear array we can think of like

for (i =[ origin : spacing : distance ] )

So in the example below, we have a cube 5 unit cube at 0,0 then one cube every 10 units, in both the X and Y direction, ending with a cube centered at 100 units.

for ( i=[0:10:100]) { translate([i,i,0]) cube(5,center=true); }

With an additional loop we can create a grid of objects.

for ( i=[0:10:100]) { for ( j=[0:10:100]) { translate([i,j,0]) cube(5,center=true); }}

## Polar Array with a For Loop

The Polar array is very similar, but instead of translating we use the loop value in a rotate command.

Just like linear array we can re-think of our for loop like this.

for ( i=[ START OF ARC: DEGREES: END OF ARC )

We use the translate([]) command to add a radius to the polar array. The radius will be the axis perpendicular the rotational axis, for a basic polar array.

translate([0,RADIUS])

To create a full polar array we start at zero degrees and go all the way around to 360 degrees.

for ( i=[1:10:360]) { rotate([i,0,0]) translate([0,30]) cube(5); }

It is fairly simple to create arc segments. The following code we create an array of cubes from 90 degrees around the x Axis to 180 degrees.

for ( i=[90:1:180]) { rotate([i,0,0]) translate([0,30]) cube(5); }

## Simple Linear Array as a Module

We can easily create a linear array “command” using the module and children command. We will create a basic linear array that extends on a single axis and uses spacing to create a number of objects. This version will always make an array of whatever object it precedes on the X axis

linear_array( 10,10) cube(5); module linear_array( count, spacing ){ for ( i=[0:spacing: spacing * count]) { translate( [i,0,0]) children(); } }

## Simple Polar Array as a Module

Our polar array works similarly to the linear array but instead of linear spacing we give the module the number of items and the spacing in degrees. We need a third parameter for the radius of the array. The result polar array will be a full circle only when the count and degrees multiply to 360, otherwise it will always be an arc starting from 0 degrees

polar_array( 20, 18, 30 ) cube(5,center=true); module polar_array( count, degrees, radius ){ for ( i=[0: degrees: count * degrees]) { rotate( [i,0,0]) translate([0,radius,0]) children(); } }

Here are the two of them, so you can use them in your code, or add them to your library folder.

```
module linear_array( count, spacing ){
for ( i=[0:spacing: spacing * count]) {
translate( [i,0,0])
children();
}
}
module polar_array( count, degrees, radius ){
for ( i=[0: degrees: count * degrees]) {
rotate( [i,0,0])
translate([0,radius,0])
children();
}
}
```