$fn = 32; $space = 3; $width = 15.5; $length = $width; $height = 1; $holes = $height*4; $cut = $holes/2*-1; $switchDistance = $width+ $space; $columns = 6; $rows = 5; $xBase = (($width + $space) * $columns) + $space; $yBase = (($length + $space) * $rows) + $space; module pin(){ cylinder(h=$holes, r=1, center=false); } module switch($diodesTop = false){ $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(); translate([0, $length + 1.4, 0]); $dDistanceFromCenter = $switchDistance/2; $dWidth = 10.95; $dHeight = 1.8; if ($diodesTop){ translate([$xCenter - ($dWidth/2), $yCenter + $dDistanceFromCenter - ($dHeight/2), 0]){ cube([$dWidth, $dHeight, $holes]); } } } module switchColumn(){ difference() { translate([-($space/2), -($space/2)]) cube([$switchDistance, $switchDistance * $rows, $height]); for (y=[0:$rows-1]){ translate([0 * ($width + $space) ,y * ($length+$space) ,0]) { switch(y<3); } } } } module rightTopDampener(){ union(){ switchColumn(); translate([$switchDistance,0,0]) switchColumn(); translate([$switchDistance * 2,5,0]) switchColumn(); translate([$switchDistance * 3,0,0]) switchColumn(); translate([$switchDistance * 4,-5,0]) switchColumn(); translate([$switchDistance * 5,-5,0]) switchColumn(); } } module leftTopDampener(){ rotate([0,180,0]){ rightTopDampener(); } } translate([10,0,0]){ rightTopDampener(); } translate([-10,0,0]){ leftTopDampener(); }