width = 140; height = 85; diameter = 120; shape_length = 50; vent_length = 18; wall_thickness = 3; $fn = 100; module squareToCircle(width, height, length, diameter, ovalfactor) { ovalf_h = 1.15; ovalf_w = 0.70; hull(){ rotate([90,0,0]) linear_extrude(1) square(size=[width, height], center=true); translate([0, length]) rotate([90,0,0]) linear_extrude(1) scale([ovalf_h, ovalf_w, 1]) circle(r=diameter/2); } translate([0, length+10, 0]) rotate([90, 0, 0]) linear_extrude(10) scale([ovalf_h, ovalf_w, 1]) circle(r=diameter/2); } module hollowStoC(width, height, length, diameter, ovalfactor, wall_thickness){ difference(){ squareToCircle(width, height, length, diameter, ovalfactor); translate([0, -0.005, 0]) squareToCircle(width-2*wall_thickness, height-2*wall_thickness, length+0.01, diameter-2*wall_thickness, ovalfactor); } } module squareHole(width, height, length, wall_thickness) { translate([0, -length/2-1, 0]) rotate([90, 0, 0]) difference(){ cube(size=[width, height, length], center=true); cube(size=[width-2*wall_thickness, height-2*wall_thickness, length+0.01], center=true); } } module diagonalPlate(width, length, thickness){ difference(){ rotate([-45, 0, 0]) cube(size=[width, length, thickness], center=true); translate([0, -length*cos(45), 0]) cube(size=[width+3, length, 20], center=true); } } module vent(width, height, length, wall_thickness) { squareHole(width, height, length, wall_thickness); translate([0, -length+1.1, 30]) diagonalPlate(width, 10, 2); translate([0, -length+1.1, 15]) diagonalPlate(width, 10, 2); translate([0, -length+1.1, 0]) diagonalPlate(width, 10, 2); translate([0, -length+1.1, -15]) diagonalPlate(width, 10, 2); translate([0, -length+1.1, -30]) diagonalPlate(width, 10, 2); translate([0, -length, 0]) rotate([90,0,0]) difference(){ cube(size=[width+15, height+15, 2], center=true); cube(size=[width, height, 2.01], center=true); } } hollowStoC(width, height, shape_length, diameter, 1, wall_thickness); vent(width, height, vent_length, wall_thickness); // translate([-120,0,0]) // cube(size=[100, 250, 10], center=true);