// Simple c shaped clip to insert into molle and mount QRS to. // Ref: Hole spacing upper 31.8mm apart, lower 64.6mm below midpoint of upper, try 6mm holes // // Strategy: // 3 cylinders at hole spacing // 3 boxes with c shape // minkowski all // cut holes, slice top and bottom // so backwards: diff 2 slices and holes, minkowski, then make the 3 cylinders and 3 cubes $fn = 40; qlsHoriz = 31.8; qlsVert = 64.6; qlsShiftX = 4; qlsShiftY = 63; qlsCant = 9.1; minkRad = 4; thickness = 5; armSize = 15; armCtc = 37; armLength = 126; // QLS spaced cylinders for add or remove module qls(diam = 6) { translate([qlsHoriz / 2, qlsVert / 2, 0]){ cylinder(44, d = diam, center = true); } translate([-1 * qlsHoriz / 2, qlsVert / 2, 0]){ cylinder(44, d = diam, center = true); } translate([0, -qlsVert / 2]){ cylinder(44, d = diam, center = true); } } module tcqls(diam = 6) { translate([qlsShiftX, qlsShiftY, 0]){ rotate(qlsCant, [0, 0, 1]){ qls(diam); } } } // main diff difference() { // diff the minkowskid collection and two slice plates and some qls holes minkowski() { // minkowski the 6 part union and a sphere union() { // union of 3 cubes and 3 cylinders from qls translate([ armCtc / 2, armLength / 2, 0 ]) { cube([ armSize - minkRad * 2, armLength - minkRad * 2, 1 ], center = true); } translate([ -armCtc / 2, armLength / 2, 0 ]) { cube([ armSize - minkRad * 2, armLength - minkRad * 2, 1 ], center = true); } translate([ 0, armLength - armSize / 2, 0 ]) { cube([ armCtc + armSize - minkRad * 2 , armSize - minkRad * 2, 1], center = true); } tcqls(12 - minkRad); } // mink sphere sphere(minkRad); } // diffed top bottom slices and qls screw holes translate([0, 0, -33 - thickness / 2]){ cube([444, 444, 66], center = true); } translate([0, 0, 33 + thickness / 2]){ cube([444, 444, 66], center = true); } tcqls(7); }