Ctrl keycap replacement.

This commit is contained in:
Jonathan Bernard 2025-05-19 17:40:17 -05:00
parent ce3aa19da3
commit 9e771b3125
2 changed files with 76 additions and 1 deletions

View File

@ -14,8 +14,12 @@ difference() {
// channel // channel
cube([30, 13, length + 10]); cube([30, 13, length + 10]);
// angled support // angled supports (X-axis)
translate([16, 9, -8]) rotate([0, -10, 0]) cube([30, 4, length + 10]); translate([16, 9, -8]) rotate([0, -10, 0]) cube([30, 4, length + 10]);
translate([16, 0, -8]) rotate([0, -10, 0]) cube([30, 4, length + 10]);
// angled supports (y-axis)
translate([0, 12, -1]) rotate([15, 0, 0]) cube([4, 10, 40]);
// base // base
cube([50, 32, 4]); cube([50, 32, 4]);

View File

@ -0,0 +1,71 @@
$fn=180;
ow=23; // outer width
od=18; // outer depth
oh=10; // outer height
ep = 0.01;
iw=17.4; // inner width
id=12.5; // inner depth
ih=7.6; // inner height
sphMul = 4;
difference() {
translate([-ow/2, -od/2, 0]) union() {
difference() {
union() {
cube([ow, od, oh]);
}
union() {
color("SlateGray") union() {
// right cut (+x)
rotate([0, 15, 0]) translate([-8, -ep, 0]) cube([8, od + 2*ep, 2*oh]);
// left cut (-x)
translate([ow, -ep, 0]) rotate([0, -15, 0]) cube([8, od + 2*ep, 2*oh]);
// front cut (-y)
rotate([-20, 0, 0]) translate([-ep, -8, 0]) cube([ow + 2*ep, 8, 2*oh]);
// back cut (+y)
translate([-ep, od, 0]) rotate([5, 0, 0]) cube([ow + 2*ep, 8, 2*oh]);
// top cut
translate([ow/2, od/2 + 6, ow*sphMul + oh - 1.4]) sphere(r=ow*sphMul);
}
// inside recess
color("SeaGreen") union() {
translate([(ow - iw)/2, (od - id)/2 + 1, -ep]) cube([iw , id, ih + ep]);
translate([(ow - iw)/2, (od - id)/2 + 1, ih]) rotate([0, 15, 0]) translate([0, 0, -ih-ep]) cube([2 , id, ih + ep]);
translate([iw + (ow - iw)/2, (od - id)/2 + 1, ih]) rotate([0, -15, 0]) translate([-2, 0, -ih-ep]) cube([2 , id, ih + ep]);
translate([(ow - iw)/2, (od - id)/2 + 1, ih]) rotate([-20, 0, 0]) translate([0, 0, -ih-ep]) cube([iw , 4, ih + ep]);
}
}
}
difference() {
cw = 4.3; // cross width
ct = 1.3; // cross thickness
// inner cylinder
color("DimGray") translate([ow/2, od/2, 1.4]) cylinder(d=5.3, h=ih - 1.4);
// inner cross recess (post hole)
color("MediumSeaGreen") translate([ow/2, od/2, 1-ep]) union() {
translate([-(ct/2), -(cw/2), 0]) cube([ct, cw, ih - 2 + ep]);
translate([-(cw/2), -(ct/2), 0]) cube([cw, ct, ih - 2 + ep]);
}
}
}
color("Gainsboro") union() {
translate([-1.8, 0, 0]) rotate([0, 0, 45]) translate([0, od/2 + 2.8, oh-1]) rotate([45, 0, 0]) cube([8, 2, 8], center=true);
translate([1.8, 0, 0]) rotate([0, 0, -45]) translate([0, od/2 + 2.8, oh-1]) rotate([45, 0, 0]) cube([8, 2, 8], center=true);
translate([-1.8, 1, 0]) rotate([0, 0, 135]) translate([0, od/2 + 2.8, oh-1.8]) rotate([45, 0, 0]) cube([8, 2, 8], center=true);
translate([1.8, 1, 0]) rotate([0, 0, -135]) translate([0, od/2 + 2.8, oh-1.8]) rotate([45, 0, 0]) cube([8, 2, 8], center=true);
}
}