use ; M3HoleDiam = 3.4; MountSize = 40; BodyWidth = 55; $fn = 100; difference() { MainBody(); M3MountHoles(); xcenter = 49; ycenter = MountSize/2 - 10; translate([xcenter, ycenter, -5]) #BottomZRodHoles(); YRodHoles(); translate([10, 45, 0]) rotate([0, 0, -90]) #motorholes(6); } module M3MountHoles(){ edgeDistance = (MountSize-20)/2; translate([0, edgeDistance, edgeDistance]) #M3Hole(6); translate([0, MountSize-edgeDistance, edgeDistance]) #M3Hole(6); translate([0, edgeDistance, MountSize-edgeDistance]) #M3Hole(6); translate([0, MountSize-edgeDistance, MountSize-edgeDistance]) #M3Hole(6); } module BottomZRodHoles(){ holedistance = 10.6; translate([holedistance/2, holedistance/2, 0]) rotate([0,270,0]) M3Hole(6); translate([-holedistance/2, holedistance/2, 0]) rotate([0,270,0]) M3Hole(6); translate([holedistance/2, -holedistance/2, 0]) rotate([0,270,0]) M3Hole(6); translate([-holedistance/2, -holedistance/2, 0]) rotate([0,270,0]) M3Hole(6); // center hole cylinder(h = 6, d = 10.3); } module YRodHoles(){ translate([55, 30, 52.5]) rotate([0, 90, 0]) #cylinder(h = 6, d = 8); translate([55, 30, -12.5]) rotate([0, 90, 0]) #cylinder(h = 6, d = 8); translate([55, 25, 10]) #union() { cube([6,10,20]); translate([0, 5, 0]) rotate([0, 90, 0]) cylinder(h = 6, d = 10); translate([0, 5, 20]) rotate([0, 90, 0]) cylinder(h = 6, d = 10); } } module M3Hole(thickness) { rotate([0, 90, 0])cylinder(h = thickness, d = M3HoleDiam); } module MainBody() { // left mount plate translate([0,0,-5]) cube([5, MountSize, MountSize+10]); // bottom frame plate translate([5, 0,-5 ]) cube([BodyWidth, MountSize, 5]); // up frame plate translate([5, 20,40 ]) cube([BodyWidth, 20, 3]); // motorholder plate translate([0, MountSize,-5 ]) cube([40+20, 5, 50]); // rod holder translate([BodyWidth, 20,-20 ]) cube([5, 25, 80]); }