// -*- C -*- holedia = 25.4; sidewidth = 5; tapewidth = 7; innerz = 10; basex = holedia + sidewidth*2; basey = holedia + tapewidth*2; bevelz = 3; bevelslope = 0.75; bevely = bevelz * bevelslope; sideslop = 0.5; basebaset = 2; basebevelt = 3; endwallt = 2; module sheared_cube(sz, xperz, yperz) { multmatrix([[1,0,xperz,0], [0,1,yperz,0], [0,0,1, 0], [0,0,0, 1]]) cube(sz); } module Base(){ difference(){ union(){ translate([0, basey-basebevelt, 0]) sheared_cube([basex, basebevelt, bevelz], 0, bevelslope); sheared_cube([basex, basebevelt, bevelz], 0, -bevelslope); cube([basex, basey, basebaset]); } translate([basex/2, basey/2, -1]) cylinder(r=holedia/2, h=bevelz+2); } rotate([90, 0, 90]) linear_extrude(height=endwallt) polygon([[0, 0], [basey, 0], [basey + bevely, bevelz], [basey + bevely, innerz], [ - bevely, innerz], [ - bevely, bevelz]]); } module Lid(){ translate([0, basey + sideslop, 0]) sheared_cube([basex, basebevelt, bevelz], 0, bevelslope); translate([0, -basebevelt - sideslop, 0]) sheared_cube([basex, basebevelt, bevelz], 0, -bevelslope); } Base(); Lid();