$fn=256; dimLeg = [32, 32, 50]; dimCaster = [31, 31, 50]; casterPinDia = 7.5; casterRestDia = 14; casterRestHeight = 3; pipeThickness = 2.2; wallThickness = 4; legCutHeight = 96; ep = 0.01; dimOuter = dimLeg + [wallThickness, wallThickness, 0]; module casterReceiver1() { translate([0, 0, dimCaster[2]/2]) difference() { cube(dimCaster, center=true); cylinder(h=dimCaster[2]+2*ep, d=casterPinDia, center=true); translate([0, 0, -dimCaster[2]/2-ep]) cylinder(h=casterRestHeight+ep, d=casterRestDia); } } module casterReceiver2() { } module legReceiver() { translate([0, 0, dimLeg[2]/2]); difference() { cube(dimLeg + [2*wallThickness, 2*wallThickness, 0], center=true); cube(dimLeg + [0, 0, 2*ep], center=true); } } module singlePiece() { difference() { union() { // Caster receiver blank linear_extrude( height=dimCaster[2], scale = [ dimOuter[0] / (casterRestDia + wallThickness), dimOuter[1] / (casterRestDia + wallThickness)]) square( [ casterRestDia + wallThickness, casterRestDia + wallThickness], center=true); // Leg extension translate([-dimOuter[0]/2, -dimOuter[1]/2, dimCaster[2] - ep]) cube([dimOuter[0], dimOuter[1], legCutHeight - dimCaster[2] + dimLeg[2] + ep]); } // Caster receiver cuts cylinder(h=dimCaster[2], d=casterPinDia); translate([0, 0, -ep]) cylinder(h=casterRestHeight + ep, d=casterRestDia); // Leg receiver cut translate([0, 0, (legCutHeight + dimLeg[2]/2)]) cube(dimLeg + [0, 0, ep], center=true); } } module supportRib() { sideLen = legCutHeight + dimLeg[2] * 3; supportHeight = legCutHeight + dimLeg[2]; difference() { translate([0, 0, supportHeight/2]) cube([sideLen, sideLen, supportHeight-ep], center=true); singlePiece(); translate([-sideLen/2-ep, 1, -ep]) cube([sideLen+2*ep, sideLen+2*ep, supportHeight+2*ep]); translate([-sideLen/2-ep, -sideLen-1, -ep]) cube([sideLen+2*ep, sideLen+2*ep, supportHeight+2*ep]); translate([0, -sideLen/2-ep, -ep]) cube([sideLen+2*ep, sideLen+2*ep, supportHeight+2*ep]); cylinder(h=legCutHeight, d=casterRestDia+2*ep); translate([0, 0, legCutHeight + dimLeg[2]/2 - ep]) cube(dimLeg + [2*ep, 2*ep, 2*ep], center=true); } } difference() { union() { rotate([0, -45, 0]) translate([(casterRestDia + wallThickness)/2, 0, 0]) union() { singlePiece(); for (i = [-1, 1]) { translate([-0.1, i*8, 0]) supportRib(); } } translate([-100, -30, 0]) cube([1, 60, 20]); } translate([-200, -200, -200]) cube([400, 400, 200]); translate([-210, -10, -ep]) cube([100, 20, 200]); }