greatfet_support.scad (2779B)
1 holeSpacingH = 60.96; 2 holeFrontSpacingV = 40.64; 3 holeBackSpacingV = 45.72; 4 5 frameEdgePaddingH = 14; 6 frameEdgePaddingV = 8; 7 8 frameSize = [holeSpacingH + frameEdgePaddingH*2, holeBackSpacingV + frameEdgePaddingV*2]; 9 frameThickness = 2; 10 frameReinforcementHeight = 4; 11 frameReinforcementThickness = 1.5; 12 frameWidth = 8; 13 14 mountLength = 15; 15 mountDia = 7; 16 mountHoleDia = 3.5; 17 mountColumns = [0, holeSpacingH, holeSpacingH]; 18 19 union() { 20 frame(); 21 mounts(); 22 } 23 24 module mounts() { 25 union() { 26 linear_extrude(mountLength) difference() { 27 mountOutlines(mountDia); 28 mountOutlines(mountHoleDia); 29 } 30 mountFlanges(); 31 } 32 } 33 34 module frame() { 35 linear_extrude(frameThickness) frameOutline(); 36 linear_extrude(frameReinforcementHeight) frameRim(frameReinforcementThickness); 37 } 38 39 module frameOutline() { 40 union() { 41 frameRim(frameWidth); 42 mountOutlines(mountDia); 43 frameFlanges(mountDia); 44 } 45 } 46 47 module frameReinforcementOutline() { 48 difference() { 49 frameRim(frameReinforcementThickness); 50 mountOutlines(mountHoleDia); 51 } 52 } 53 54 module frameRim(width) { 55 difference() { 56 offset(r=width/2) square(size=frameSize, center=true); 57 offset(r=-width/2) square(size=frameSize, center=true); 58 } 59 } 60 61 module mountOutline(d) { 62 circle(d/2, $fn=32); 63 } 64 65 module mountOutlines(d) { 66 // front 67 translate([-holeSpacingH/2, holeFrontSpacingV/2]) mountOutline(d); 68 translate([-holeSpacingH/2, -holeFrontSpacingV/2]) mountOutline(d); 69 // back 70 translate([holeSpacingH/2, holeBackSpacingV/2]) mountOutline(d); 71 translate([holeSpacingH/2, -holeBackSpacingV/2]) mountOutline(d); 72 } 73 74 module frameFlanges(length) { 75 translate([-holeSpacingH/2-mountDia/2, holeFrontSpacingV/2]) square(size=[length, frameWidth]); 76 translate([-holeSpacingH/2-mountDia/2, -holeFrontSpacingV/2-mountDia-frameThickness/2]) square(size=[length, frameWidth]); 77 translate([holeSpacingH/2-mountDia/2, holeBackSpacingV/2]) square(size=[length, frameWidth]); 78 translate([holeSpacingH/2-mountDia/2, -holeBackSpacingV/2-mountDia-frameThickness/2]) square(size=[length, frameWidth]); 79 } 80 81 module mountFlange(edgePadding) { 82 translate([-frameReinforcementThickness/2, 0]) rotate([90, 0, 90]) 83 linear_extrude(frameReinforcementThickness) polygon(points=[ 84 [mountHoleDia/2, 0], 85 [edgePadding, 0], 86 [edgePadding, frameReinforcementHeight], 87 [mountHoleDia/2, mountLength]]); 88 } 89 90 module flangeFront() { 91 translate([-holeSpacingH/2, holeFrontSpacingV/2+frameReinforcementThickness]) mountFlange(mountDia+(holeBackSpacingV-holeFrontSpacingV)/2); 92 } 93 94 module flangeBack() { 95 translate([holeSpacingH/2, holeBackSpacingV/2+frameReinforcementThickness]) mountFlange(mountDia); 96 } 97 98 module mountFlanges() { 99 flangeFront(); 100 mirror([0,1,0]) flangeFront(); 101 flangeBack(); 102 mirror([0,1,0]) flangeBack(); 103 }