@hrgdavor nice reply. that was my first thought after looking at the example from @Robert-Olson transforms (translation, rotation, scale, center, etc) are very fast, as only the matrix part of the geometry is modified. so, create a 'part' once and translate many times. here's a example from one of my designs. const makeRow = (h, p) => { let i = 0 let x = 0 let y = 0 let c = circle({radius: p.case_b_v_h, segments: p.segments}) let holes = [c] for (i = 1; i < h; i++) { y = y + (p.case_b_v_h * 2) + p.case_b_v_g holes.push(translate([x, y], c)) } return translate([0, -(y / 2)], holes) }