ventH = 2; holeR = 25; outerR = 33; insertH = 7; insertR = holeR; insertThickness = .5; pivotR = 5; pivotHoleR = 1.5; screenWireWidth = .75; screenWireSpacing = 4; //space between is this minus screenWire Width $fn=40; module outerRing(){ cylinder(h=ventH, r=outerR, center=false); } module hole(){ translate(v = [outerR, 0, 0]){ cylinder(h=insertH, r=holeR-insertThickness , center=false); } } module pivotHole(){ translate(v = [0, 0, 0]){ cylinder(h=ventH, r=pivotHoleR, center=false); } } module pivotHoleFarSide(){ translate(v = [outerR*2, 0, 0]){ cylinder(h=ventH, r=pivotHoleR, center=false); } } module holes(){ hole(); pivotHole(); pivotHoleFarSide(); } module pivot(){ translate(v = [0, 0, 0]){ cylinder(h=ventH, r=pivotR, center=false); } } module pivotFarSide(){ translate(v = [outerR*2, 0, 0]){ cylinder(h=ventH, r=pivotR, center=false); } } module solidDisk(){ translate(v = [outerR, 0, 0]){ outerRing(); } } module solidDiskForHole(){ translate(v = [outerR, 0, 0]){ outerRing(); } } module lip(){ translate(v = [outerR, 0, 0]){ cylinder(h=insertH, r=insertR, center=false); } } module mainShape(){ difference(){ union(){ lip(); hull(){ solidDiskForHole(); //solidDisk(); pivot(); pivotFarSide(); //roundedEnd(); } } holes(); } } module cover(){ translate(v = [outerR*2 + pivotR *2 +2, 0, 0]){ difference(){ union(){ hull(){ solidDisk(); pivot(); } } pivotHole(); } } } module screenSquare(){ for(offSet = [ -holeR : screenWireSpacing : holeR]){ translate(v = [-holeR, offSet, 0]){ cube(size = [holeR *2,screenWireWidth,screenWireWidth], center = false); } } for(offSet = [ -holeR : screenWireSpacing : holeR]){ translate(v = [offSet, -holeR, 0]){ cube(size = [screenWireWidth,holeR *2,screenWireWidth], center = false); } } } module screen(){ translate(v = [outerR, 0, 0]){ intersection() { cylinder(h=ventH, r=holeR, center=false);//hole() but not offset screenSquare(); } } } module roundedEnd(){ translate(v = [0, outerR/2, 0]){ difference(){ cylinder(h=ventH, r=outerR * 2, center=false); translate(v = [-outerR *2, -outerR, 0]){ cube(size = [outerR *4,outerR *4,ventH], center = false); } } } } module testScreen(){ difference(){ solidDiskForHole(); hole(); } screen(); } module handle(){ translate(v = [-ventH/2, -outerR -6, 0]){ minkowski(){ cube(size = [ventH,outerR, outerR /6], center = false); rotate([0,90,0]){ translate(v = [-3, 0, 0]){ cylinder(h=ventH/2, r= 3, center=false); } } } } } mainShape(); screen(); //cover(); //handle(); //testScreen();