$fn=100; thickness = 5; x = 250; y = 190; z = 120; rim_breadth = 30; drain_d = 34; scale_center_crosspiece = 0.15; difference () { difference () { union() { // Base bowl difference() { cube([x, y, z], center=true); translate([0, thickness/2+0.01, thickness/2+0.01]) cube([x-2*thickness, y-thickness, z-thickness], center=true); } // Center crosspiece translate([0, 0, -z/2 + thickness + scale_center_crosspiece*z/2]) cube([2*thickness, y, scale_center_crosspiece*z], center=true); // Rim back end /*translate([0, -y/2 - rim_breadth/2, z/2-thickness/2]) cube([x, rim_breadth, thickness], center=true);*/ // Rim sides /*for (v=[-1:2:1]) { translate([v*(x + rim_breadth)/2, -rim_breadth/2, z/2-thickness/2]) cube([rim_breadth, y + rim_breadth, thickness], center=true); }*/ // Front end dam scale_dam = 0.4; translate([0, y/2 - thickness/2, -z/2 + (scale_dam*z)/2]) cube([x, thickness, scale_dam*z], center=true); } // Drain union() { scale_drain_gland = 1.4; cylinder(r=drain_d/2, h=2*z ,center=true); translate([0, 0, -z/2+(scale_center_crosspiece*z)/2+thickness]) cylinder(r=scale_drain_gland*(drain_d/2), h=scale_center_crosspiece*z+thickness,center=true); } } translate([-x/4 - rim_breadth/2, 0, 0]) cube([x/2+rim_breadth+0.01, 2*y, 2*z], center=true); }