-
-
Save dragon788/4d539d98b5d7d888a615 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// dimensions Cherry MX connector | |
var c_corr = 0.4 // tolerance | |
var c_horiz = 1.1 // horizontal bar width | |
var c_vert = 1.0 // vertical bar width | |
var c_dia = 4 // cross width | |
var c_depth = 7 // connector depth | |
var c_space = 7 // height of hollow inside | |
var c_inset = 0.75 // distance connector start to keycap base | |
// stuff | |
var $fn = 64 | |
function connector() { | |
return difference( | |
support(), | |
plus() | |
).translate([0, 0, 0]) | |
} | |
function plus() { | |
return union( | |
cube({ size: [c_vert+c_corr, c_dia+c_corr, c_depth-3], center: true }), | |
cube({ size: [c_dia+c_corr, c_horiz+c_corr, c_depth-3], center: true }) | |
).translate([0, 0, (c_depth-3)/2]) | |
} | |
function support() { | |
var width = top_y-2 | |
var depth = c_dia+c_corr | |
return cube({ size: [width, depth-1, c_space+c_corr] }) | |
.subtract([ | |
rotate([0, 50, 0], | |
cube({size: [depth+5, depth, depth]}) | |
).translate([-5, 0, 4]), | |
mirror([1, 0, 0], rotate([0, 50, 0], | |
cube({size: [depth+5, depth, depth]}) | |
).translate([-19, 0, 4])) | |
]) | |
.translate([-width/2, -(depth-1)/2, 0]) | |
} | |
var base_w = 18 | |
var top_y = 16 | |
var dx = 2 // top sides are pushed to center | |
var dy = 1 // top is pushed back this far | |
var z_front = 6+2 // height at front edge | |
var z_back = 6+2 // height at back edge | |
var angle = Math.atan((z_front-z_back) / top_y) | |
/* | |
______ | |
/7 6/| | |
/4___5/ | | |
| |___|_| | |
| /3 |2/ | |
|/0___1|/ | |
*/ | |
function shell() { | |
return polyhedron({ | |
points: [ | |
[ 0, 0, 0 ], | |
[ base_w, 0, 0 ], | |
[ base_w, base_w, 0 ], | |
[ 0, base_w, 0 ], | |
[ dx, dy, z_front ], | |
[ base_w-dx, dy, z_front ], | |
[ base_w-dx, dy+top_y, z_back ], | |
[ dx, dy+top_y, z_back ] | |
], | |
triangles: [ | |
[0,5,1], [0,4,5], | |
[1,6,2], [1,5,6], | |
[2,7,3], [2,6,7], | |
[3,4,0], [3,7,4], | |
[4,6,5], [4,7,6], | |
[0,1,3], [1,2,3] | |
] | |
}).translate([-base_w/2, -base_w/2, 0]) | |
} | |
var FLU = 1.6 // Fundamental Lego Unit = 1.6 mm | |
var brick_width = 5*FLU | |
var brick_half = 2.5*FLU | |
var brick_height = 6*FLU | |
var wall_thickness = FLU | |
var stud_radius = 1.5 * FLU | |
var stud_height = FLU | |
var correction = 0.1 | |
function stud() { | |
return cylinder({ h: stud_height + correction, r: stud_radius }) | |
} | |
function studs() { | |
return union( | |
stud().translate([brick_half, brick_half, -correction]), | |
stud().translate([brick_half, -brick_half, -correction]), | |
stud().translate([-brick_half, brick_half, -correction]), | |
stud().translate([-brick_half, -brick_half, -correction]) | |
) | |
} | |
function cap() { | |
return difference( | |
shell(), | |
shell().scale(0.88) | |
) | |
} | |
function main() { | |
return [ | |
cap(), | |
connector(), | |
studs().translate([0, 0, z_front]) | |
] | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment