remote_width=56.2; remote_height=124.7; remote_thick=6.8; mainhole_thick=remote_thick+1; hook_hook_thick=1.5; hook_stem_thick=1.5; hook_hook_len=1.5; base_thick=6; base_margin=4.0; base_width=remote_width-base_margin*2; base_height=remote_height-base_margin*2; // origin is base of mainhole module mainhole() { translate([ -remote_width/2, 0, 0 ]) cube(center=false, size=[ remote_width, remote_height, mainhole_thick ] ); } module hhook(extent) { difference() { translate([ -hook_stem_thick, 0, -base_thick*2 ]) cube(center=false, size=[ hook_stem_thick+15, extent, base_thick*2 + mainhole_thick + hook_hook_thick ]); translate([hook_hook_len, -5, 0]) cube(center=false, size=[ 20, extent+10, 30 ]); } } module hhookside(extent) { translate([ -remote_width/2, 0, 0 ]) hhook(extent); } module hhookbot(extent) { rotate(a=90, v=[0,0,1]) hhook(extent); } module hstuff() { translate([0,70,0]) hhookside(15); translate([0,10,0]) hhookside(15); translate([-10,0,0]) hhookbot(15); } module base() { translate([-base_width/2, base_margin, -base_thick*2]) cube(center=false, [base_width,base_height,base_thick+10]); } module stuff() { hstuff(); mirror([1,0,0]) hstuff(); base(); } module screwhole(holedia, csdia) { // screw goes along z axis downwards // origin is base of countersink // results are positive, so this should be subtracted translate([0,0,-100]) cylinder(h=200, r=holedia/2); cylinder(h=100, r=csdia/2); } difference() { stuff(); mainhole(); translate([0, 20, -base_thick+2]) screwhole(4,10); translate([0, remote_height-30, -base_thick+2]) screwhole(4,10); translate([0,0,-50 - base_thick]) cube(center=true,[300,300,100]); // print bed }