$fn = 500; $airVentDiameter = 150; // Measured thickness in mm $baseTolerance = 1; // How much tolerance (per side) there should be. This should (probably) be relatively lax $gapSealantMinThickness = 3; // Assuming sealant tape is installed, how much its minimum thickness should one assume to be? $holeDiameter = 150 + 2*($baseTolerance + $gapSealantMinThickness); // With this knowledge, how large the hole must be by minimum? $outerDiameter = 200; // What is the outer diameter of the entire part? $screwHoles = 3; $thickness = 12; $eps = 1 / 100; module ScrewHole() { cylinder(h = $thickness + 2*$eps, d = 8+($baseTolerance)); translate([0, 0, $thickness - 6]) cylinder(h = 6 + 2*$eps, d = 19); } difference() { linear_extrude(height = 10) difference() { circle(d = $outerDiameter); circle(d = $holeDiameter); }; for ( i = [0 : ($screwHoles-1)] ) { rot = i * (360 / $screwHoles); rotate(a = rot, v = [0, 0, 1]) translate([0, (($outerDiameter-$holeDiameter)/2 + $holeDiameter) / 2, -1 * $eps]) ScrewHole(); } }