height = 13.25; topDiameter =9.75; lowerDiameter = 10.85; stepDiameter = 9; stepDepth = 1.5; crossDepth = .75; // original mesurement ~0.25 crossWidth = 2.25; crossStartHeight = 2; // mostly not really measured chamferHeight = 10; chamferDiameter = topDiameter-crossDepth*2; // measured from metal pole, not plastic knob knobDepth = 7; knobDiameter = 4.75; knobFlatDiameter = 4; knobTolerance = 0.1; $fn = 100; difference () { union() { translate([0,0,stepDepth]) { difference() { // main exterior intersection() { cylinder(r1=lowerDiameter/2, r2=topDiameter/2, h=height-stepDepth); // chamfer union() { translate([0,0,chamferHeight]) cylinder(r1=lowerDiameter/2, r2=chamferDiameter/2, h=height-stepDepth-chamferHeight); cylinder(r=lowerDiameter/2, h=chamferHeight); } } // cross difference() { union() translate([0, 0, height/2 - .01]) { cube([lowerDiameter, crossWidth, height], center=true); cube([crossWidth, lowerDiameter, height], center=true); } // put back the middle cylinder(r1=lowerDiameter/2 - crossDepth, r2=topDiameter/2 - crossDepth, h=height-stepDepth); // put back the bottom cylinder(r=lowerDiameter, h=crossStartHeight); } } } //bottom step cylinder(r=stepDiameter/2, h=stepDepth+0.01); } //inner concavity difference() { translate([0,0,-0.01]) cylinder(d=knobDiameter + knobTolerance*4, h=knobDepth + 0.01); #translate([-stepDiameter/2, knobFlatDiameter - knobDiameter/2 + knobTolerance*5, 0]) cube([stepDiameter, stepDiameter, height]); } }