include <./config.scad> include <../helper/screws.scad> include <../helper/halfspace.scad> include <../misc/magnet.scad> include <./sharedVariables.scad> sideWallConnW = 7; sideWallConnD = 20; sideWallConnH = 2; sideWallConnLugDepression = sideWallConnH; yBarScrewHoleToOuterYEdge = 3.5; yBarScrewHoleToFrontXEdge = 16; magnetFaceToSideWallConnOuterYEdge = 2; magnetMountShellRadius = magnetRSlacked + 1; innerSideWallToYBarMagnetConn = magnetFaceToSideWallConnOuterYEdge + sideWallSlotToOuterYEdge - sideWallThickness; magnetMountToYBarTop = magnetMountShellRadius + 1; magnetMountToYBarFront = magnetMountShellRadius + sideWallSlotToXZ + 2; hingePoleR = 2; hingePoleH = 5; hingeHoleR = hingePoleR + 0.2; hingePoleToConnectorOuterYZFace = hingePoleR/2; hingePoleToConnectorOuterXZFace = hingePoleR/2; *sideWallConnector_N(); *sideWallConnectorMagnet(); *sideWallConnectorMagnetSide(); *sideWallConnectorHinge(); module sideWallConnector_N() { translate(v = [0, 0, -sideWallConnLugDepression]) cube(size = [sideWallConnW, sideWallConnD, sideWallConnLugDepression]); translate(v = [yBarScrewHoleToOuterYEdge, yBarScrewHoleToFrontXEdge, -(m3HeatSetInsertSlotHeightSlacked+sideWallConnLugDepression)]) heatSetInsertSlot_N(rackFrameScrewType); } module sideWallConnectorMagnet() { applyYBarScrewMount() applyMagnetMount() base(); module base() { intersection() { cube(size = [sideWallConnW, sideWallConnD, sideWallConnLugDepression]); // TODO: pattern for this? beef up mirror4XY? cVal = 0.5; halfspace(p=[0,cVal,0], vpos=[0,1,1]); halfspace(p=[cVal,0,0], vpos=[1,0,1]); halfspace(p=[sideWallConnW-cVal,0,0], vpos=[-1,0,1]); halfspace(p=[0,sideWallConnD-cVal,0], vpos=[0,-1,1]); } } module applyYBarScrewMount() { apply_n() { translate(v = [yBarScrewHoleToOuterYEdge, yBarScrewHoleToFrontXEdge, sideWallConnLugDepression]) counterSunkHead_N(rackFrameScrewType, headExtension = eps, screwExtension = inf10); children(0); } } module applyMagnetMount() { magnetMountDx = magnetMountShellRadius; magnetMountDy = magnetMountToYBarFront - sideWallSlotToXZ; magnetMountDz = magnetMountToYBarTop + sideWallConnLugDepression; apply_pn() { magnetMountShell(); magnetMountHole(); children(0); } module magnetMountShell() { hull() { translate(v = [0, magnetMountDy, magnetMountDz]) rotate(a = [0, 90, 0]) cylinder(r = magnetMountShellRadius, h = sideWallConnW-magnetFaceToSideWallConnOuterYEdge); translate(v = [0, 2, sideWallConnH]) cube(size = [sideWallConnW-magnetFaceToSideWallConnOuterYEdge, 2*magnetMountShellRadius, eps]); } } module magnetMountHole() { translate(v = [sideWallConnW-(magnetFaceToSideWallConnOuterYEdge+magnetHSlacked), magnetMountDy, magnetMountDz]) rotate(a = [0, 90, 0]) cylinder(r = magnetRSlacked, h = magnetHSlacked); } } } module sideWallConnectorHinge() { applyHingePole() applyYBarScrewMount() base(); module base() { intersection() { cube(size = [sideWallConnW, sideWallConnD, sideWallConnLugDepression]); // TODO: pattern for this? beef up mirror4XY? cVal = 0.5; halfspace(p=[0,cVal,0], vpos=[0,1,1]); halfspace(p=[cVal,0,0], vpos=[1,0,1]); halfspace(p=[sideWallConnW-cVal,0,0], vpos=[-1,0,1]); halfspace(p=[0,sideWallConnD-cVal,0], vpos=[0,-1,1]); } } module applyHingePole() { apply_p() { translate(v = [sideWallConnW-hingePoleR, hingePoleR, sideWallConnH]) cylinder(r = hingePoleR, h = hingePoleH); children(0); } } module applyYBarScrewMount() { apply_n() { translate(v = [yBarScrewHoleToOuterYEdge, yBarScrewHoleToFrontXEdge, sideWallConnLugDepression]) counterSunkHead_N(rackFrameScrewType, headExtension = eps, screwExtension = inf10); children(0); } } } // TODO: better naming module sideWallConnectorMagnetSide() { // oriented so that the xy face is the side wall's inner face difference() { cylinder(r1 = magnetMountShellRadius+0.5, r2 = magnetMountShellRadius, h = innerSideWallToYBarMagnetConn); translate(v=[0, 0, innerSideWallToYBarMagnetConn-magnetHSlacked]) cylinder(r = magnetRSlacked, h = magnetHSlacked); } }