$fn = 32; $space = 5; $width = 15.2; $length = $width; $height = 0.4; $holes = $height*4; $columns = 6; $rows = 5; module pin(){ cylinder(h=$holes, r=1, center=false); } module switch(){ $xCenter = $width/2; $yCenter = $length/2; translate([$xCenter, $yCenter, 0]) cylinder(h=$holes, r=2.522, center=false); translate([$xCenter + 0, $yCenter + 5.9,0]) pin(); translate([$xCenter + 5, $yCenter + 3.8,0]) pin(); translate([$xCenter + -5, $yCenter + 3.8,0]) pin(); translate([$xCenter + -5, $yCenter + -5.15,0]) pin(); translate([$xCenter + 5, $yCenter+-5.15,0]) pin(); } module switches(){ for (x=[0:$columns -1]) for (y=[0:$rows-1]) translate([x * ($width + $space/2) ,y * ($length+$space/2) ,0]) switch(); } module body(){ $x = (($width + ($space/2)) * $columns) + $width; $y = (($length + ($space/2)) * $rows) + $width; cube([$x, $y, $height]); } difference(){ body(); translate([$space,$space,$holes/2*-1]) switches(); }