$fn=60; include base_width=30; base_height=10; base_length=100; difference() { union() { cuboid([base_width,base_length,base_height], rounding=1); top_half() xcyl(d=base_length, l=base_width, rounding=1); } top_half(z=base_height/2) xcyl(d=base_length*3/4, l=base_width, rounding=-1); top_half(z=base_height/2) xcyl(d=base_length, l=base_width/3, rounding=-1); translate([0,base_length/3,0]) zcyl(d=5, l=base_height, rounding=-1); translate([0,-base_length/3,0]) zcyl(d=5, l=base_height, rounding=-2); } difference() { top_half(z=base_height/3) xcyl(d=base_length/2, l=base_width, rounding=1); top_half(z=base_height/2) xcyl(d=base_length/2, l=base_width/3, rounding=-1); translate([0,0,base_height]) xcyl(d=5, l=base_width, rounding=-1); }