/// title : Basic Sleeved Rubber Bushing // author : Tim Farrell // license : MIT License // revision : 3 // tags : Rubber // file : bushing.jscad function getParameterDefinitions () { return [ {name: 'overhang', type: 'float', initial: 7, min: 1, max: 40, step: 1, caption: 'Overhang'}, {name: 'host_hole_diameter', type: 'float', initial: 13, min: 1, max: 40, step: 1, caption: 'Host hole diameter'}, {name: 'host_hole_height', type: 'float', initial: 0.8, caption: 'Host hole height'}, {name: 'bushing_height', type: 'float', initial: 4, min: 1, max: 40, step: 1, caption: 'Bushing height'}, {name: 'bushing_diameter', type: 'float', initial: 10, min: 1, max: 40, step: 1, caption: 'Bushing diameter'}, {name: 'taper', type: 'checkbox', checked: true, caption: 'Taper Edges?'} ]; } function donut(p) { const inner_radius = (p.bushing_height - p.host_hole_height) / 2; const outer_radius = p.overhang + p.host_hole_diameter/2 - inner_radius; const z_offset = p.bushing_height/2 - (p.bushing_height/2 - p.host_hole_height/2); return union( torus({ ri: inner_radius, ro: outer_radius }).translate([0, 0, z_offset]), torus({ ri: inner_radius, ro: outer_radius }).translate([0, 0, -z_offset]) ); } function bushing_main(p) { const outer_radius = p.overhang + p.host_hole_diameter/2; const main_cylinder = cylinder({ r: outer_radius - (p.taper ? (p.bushing_height - p.host_hole_height) / 2 : 0), h: p.bushing_height, center: true }); if (p.taper) { return union( main_cylinder, donut(p) ); } return main_cylinder; } function host_hole(p) { const inner_radius = p.host_hole_diameter/2; const outer_radius = p.overhang + inner_radius; return difference( cylinder({r: outer_radius, h: p.host_hole_height, center: true}), cylinder({r: inner_radius, h: p.host_hole_height, center: true}) ); } function bushing_sleeve(p) { return cylinder({r: p.bushing_diameter/2, h: p.bushing_height, center: true}); } function main(p) { return difference( bushing_main(p), host_hole(p), bushing_sleeve(p) ); }