Skip to content

Commit e32c51a

Browse files
committed
Oh my, I'm actually updating.
Cleaned clutters, updated photos for once, Still utter spaghetti.
1 parent bbdd8a5 commit e32c51a

36 files changed

+1413
-5908
lines changed

DES_MX_MiniWarp.scad renamed to Choc_Chicago_Steno.scad

Lines changed: 175 additions & 141 deletions
Large diffs are not rendered by default.

DES_Choc_Concave.scad renamed to Choc_Chicago_Steno_Convex.scad

Lines changed: 91 additions & 109 deletions
Original file line numberDiff line numberDiff line change
@@ -5,44 +5,33 @@ use <scad-utils/trajectory.scad>
55
use <scad-utils/trajectory_path.scad>
66
use <sweep.scad>
77
use <skin.scad>
8-
9-
/*DES (Distorted Elliptical Saddle) Sculpted Profile for 6x3 and corne thumb
10-
Version 2: Eliptical Rectangle
11-
12-
*/
13-
//#square([18.16, 18.16], center = true);
14-
15-
//TODO add shift
16-
mirror([0,0,0])keycap(keyID = 1, cutLen = 0, Stem =true, Dish = true, Stab = 0 , visualizeDish = true, crossSection = false, homeDot = false, Legends = false);
17-
//#translate([0,0,0])cube([14.5, 13.5, 10], center = true); // internal check
18-
//#translate([0,0,0])cube([17.5, 16.5, 10], center = true); // external check
19-
20-
21-
//n translate([0,19, 0])keycap(keyID = 3, cutLen = 0, Stem =true, Dish = true, visualizeDish = true, crossSection = true, homeDot = false, Legends = false);
22-
// translate([0,38, 0])mirror([0,1,0])keycap(keyID = 2, cutLen = 0, Stem =true, Dish = true, visualizeDish = false, crossSection = true, homeDot = false, Legends = false);
23-
RowHome = [0,2.5,5,2.5,0,0];
24-
25-
//for(Col = [6:6]){
26-
// for(Row = [1:3]){
27-
// translate([19*Col, 19*Row +RowHome[Col], 0])keycap(keyID = Col*4+Row, cutLen = 0, Stem = false, Dish = true, visualizeDish = false, crossSection = false,Legends = false);
28-
// }
29-
//}
30-
31-
32-
33-
//#translate([0,38,13])cube([18-5.7, 18-5.7,1],center = true);
8+
//use <z-butt.scad>
9+
10+
//NOTE: with sweep cuts, top surface may not be visible in review, it should be visible once rendered
11+
12+
mirror([0,0,0])keycap(
13+
keyID = 1, //change profile refer to KeyParameters Struct
14+
cutLen = 0, //Don't change. for chopped caps
15+
Stem = true, //tusn on shell and stems
16+
StemRot = 0,//change stem orientation by deg
17+
Dish = true, //turn on dish cut
18+
Stab = 0,
19+
visualizeDish = false, // turn on debug visual of Dish
20+
crossSection = false, // center cut to check internal
21+
homeDot = false, //turn on homedots
22+
Legends = false
23+
);
3424

3525
//Parameters
3626
wallthickness = 1.2;
37-
topthickness = 3; //
27+
topthickness = 2; //
3828
stepsize = 50; //resolution of Trajectory
3929
step = 1; //resolution of ellipes
4030
fn = 32; //resolution of Rounded Rectangles: 60 for output
4131
layers = 40; //resolution of vertical Sweep: 50 for output
4232
dotRadius = 1.25; //home dot size
4333
//---Stem param
4434
slop = 0.25;
45-
stemRot = 0;
4635
stemWid = 8;
4736
stemLen = 6;
4837
stemCrossHeight = 1.8;
@@ -54,22 +43,39 @@ driftAngle = 0;
5443
keyParameters = //keyParameters[KeyID][ParameterID]
5544
[
5645
// BotWid, BotLen, TWDif, TLDif, keyh, WSft, LSft XSkew, YSkew, ZSkew, WEx, LEx, CapR0i, CapR0f, CapR1i, CapR1f, CapREx, StemEx
57-
//normie hipro
58-
[17.16, 17.16, 6.5, 6.5, 5.5, 0, 0, -3, 0, 0, 2, 2, 1, 5, 1, 3.5, 2, 2], //R5 1u
59-
[35.96, 17.16, 6.5, 6.5, 5.5, 0, 0, -3, 0, 0, 2, 2, 1, 5, 1, 3.5, 2, 2], //R5 2u ver 1
60-
[35.96, 17.16, 6.5, 6.5, 5.5, 0, 0, -0, 0, 0, 2, 2, 1, 5, 1, 3.5, 2, 2], //R4 2u ver 1
61-
[35.96, 17.16, 6.5, 6.5, 5.5, 0, 0, -5, 0, 0, 2, 2, 1, 5, 1, 3.5, 2, 2], //R3 2u ver 1
62-
[16.90, 15.80, 7, 4, 5.5, 0, .0, 5, -0, -0, 2, 3, .75, 1, .75, 4, 2, 2],
63-
[16.80, 15.80, 7, 4, 5.5, 0, .0, 5, -0, -0, 2, 3, .75, 1, .75, 4, 2, 2],
64-
[17.16, 17.16, 6.5, 6.5, 14.0, 0, 0, -14, 0, 0, 2, 2, 1, 5, 1, 3.5, 2, 2], //R1
46+
//Column 0
47+
//Levee: Chicago in choc Dimension
48+
[17.20, 16.00, 5.6, 5, 3.8, 0, -.5, 7, -0, -0, 2, 2, .10, 3, .10, 3, 2, 2], //Chicago Steno R2x 1u
49+
[17.20, 16.00, 5.6, 5, 4.4, 0, .0, 0, -0, -0, 2, 2, .10, 3, .10, 3, 2, 2], //Chicago Steno R3x 1u
50+
[35.85, 15.65, 7, 7, 4.4, 0, .0, 0, -0, -0, 2, 2, .30, 5, .30, 5, 2, 2], //Chicago Steno R3x 1.5u
51+
[35.85, 15.65, 7, 7, 4.4, 0, .0, 0, -0, -0, 2, 2, .30, 5, .30, 5, 2, 2], //Chicago Steno R3x 2u
52+
//mods 3
53+
54+
[17.20, 16.00, 4.25, 3.25, 5.5, -.7, 0.7, 0, -4, -0, 2, 2, .10, 2, .10, 2, 2, 2], //Levee Corner R2
55+
[17.20, 16.00, 4.25, 3.25, 5.2, -.8, 0.6, 0, -4, -0, 2, 3, .10, 2, .10, 2, 2, 2], //Levee Corner R2
56+
//1.25 5
57+
[21.3, 15.60, 5.6, 5, 4.5, 0, .0, 5, -0, -0, 2, 2, .5, 3, .5, 3, 2, 2], //Chicago Steno R2/R4 1.25u
58+
[21.4, 15.60, 5.6, 5, 4.5, 0, .0, 0, -0, -0, 2, 2, .5, 3, .5, 3, 2, 2], //Chicago Steno R3 1.25u
59+
//1.5 7
60+
[26.15, 15.60, 5.6, 5, 4.5, 0, .0, 5, -0, -0, 2, 2, .5, 3, .5, 3, 2, 2], //Chicago Steno R2/R4 1.5
61+
[26.15, 15.60, 5.6, 5, 4.5, 0, .0, 0, -0, -0, 2, 2, .5, 3, .5, 3, 2, 2], //Chicago Steno R3 1.5u
62+
//1.75 9
63+
[30.90, 15.60, 5.6, 5, 4.5, 0, .0, 5, -0, -0, 2, 2, .5, 3, .5, 3, 2, 2], //Chicago Steno R2/R4 1.5
64+
[30.90, 15.60, 5.6, 5, 4.5, 0, .0, 0, -0, -0, 2, 2, .5, 3, .5, 3, 2, 2], //Chicago Steno R3 1.5u
65+
// Ergo shits
66+
[18.75, 18.75, 5.6, 5, 8, 0, .25, 0, -0, -0, 2, 2.5, .10, 3, .10, 3, 2, 2], //highpro 19.05 R2|4
67+
[17.20, 16.00, 5.6, 5, 4.7, 0, .0, 3, -0, -0, 2, 2.5, .10, 2, .10, 3, 2, 2], //Chicago Steno R2 ALT
68+
[17.20, 16.00, 5.6, 5, 5.5, 0, .0, 7, -0, -0, 2, 2.5, .10, 2, .10, 3, 2, 2], //Chicago Steno R1 Steap
69+
[17.20, 16.00, 5.6, 5, 7.0, 0, .0, 10, -0, -0, 2, 2.5, .10, 2, .10, 3, 2, 2], //Chicago Steno R1 mild with alt R2
6570
];
6671

6772
dishParameters = //dishParameter[keyID][ParameterID]
6873
[
6974
//FFwd1 FFwd2 FPit1 FPit2 DshDepi DishDepf,DshHDif FArcIn FArcFn FArcEx BFwd1 BFwd2 BPit1 BPit2 BArcIn BArcFn BArcEx
70-
[ 4, 4.2, -5, -20, 1.5, 3.25, 8.2, 9, 2, 5, 3, -5, -20, 8.2, 9, 2], //R5 2u
71-
[ 4, 4.2, -5, -20, 2, 4.25, 18.2, 21, 2, 5, 3, -5, -20, 18.2, 21, 2], //R5 2u
72-
[ 4, 4.2, -5, -15, 1, 3, 18.2, 21, 2, 4, 4.2, -5, -15, 18.2, 21, 2], //R4 2u
75+
[ 5, 2.3, 2, -55, 1.5, 3.75, 8.5, 8.5, 2, 5, 3, 2, -50, 8.5, 8.7 , 2], //R2x 1u
76+
[ 4.5, 3.3, -3, -45, 1.5, 3.75, 8.5, 8.7, 2, 4.5, 3.3, -3, -45, 8.5, 8.7, 2], //R3x 1u
77+
[ 4.5, 3.2, -5, -45, 1.5, 3.75, 19.0, 18, 2, 4.5, 3.2, -5, -45, 19.0, 18, 2], //R3x 2u
78+
[ 4.5, 3.2, -5, -45, 1.5, 3.75, 19.0, 18, 2, 4.5, 3.2, -5, -45, 19.0, 18, 2], //R3x 2u
7379
[ 4, 4.2, -5, -15, 1, 3, 18.2, 21, 2, 5, 3, -5, -15, 18.2, 21, 2], //R3 2u
7480
[ 4., 1.5, 8, -55, 3, 7, 9.0, 9, 2, 4, 3, 3, -50, 9, 9, 2], //R3
7581
[ 4., 1.5, -0, -50, 3, 7, 9.0, 9, 2, 4, 3, -10, -50, 9, 9, 2], //R3
@@ -210,7 +216,7 @@ function StemRadius(t, keyID) = pow(t/stemLayers,3)*3 + (1-pow(t/stemLayers, 3))
210216

211217

212218
///----- KEY Builder Module
213-
module keycap(keyID = 0, cutLen = 0, visualizeDish = false, rossSection = false, Dish = true, Stem = false, homeDot = false, Stab = 0) {
219+
module keycap(keyID = 0, cutLen = 0, visualizeDish = false, csrossSection = false, Dish = true, Stem = false,StemRot = 0, homeDot = false, Stab = 0) {
214220

215221
//Set Parameters for dish shape
216222
FrontPath = quantize_trajectories(FrontTrajectory(keyID), steps = stepsize, loop=false, start_position= $t*4);
@@ -235,13 +241,13 @@ module keycap(keyID = 0, cutLen = 0, visualizeDish = false, rossSection = false,
235241
}
236242
}
237243
if(Stem == true){
238-
translate([0,0,StemBrimDep])rotate([0,0,stemRot])choc_stem(); // generate mx cherry stem, not compatible with box
244+
translate([0,0,StemBrimDep])rotate([0,0,StemRot])choc_stem();
239245
if (Stab != 0){
240-
translate([Stab/2,0,0])rotate([0,0,stemRot])cherry_stem(KeyHeight(keyID), slop);
241-
translate([-Stab/2,0,0])rotate([0,0,stemRot])cherry_stem(KeyHeight(keyID), slop);
246+
// translate([Stab/2,0,0])rotate([0,0,stemRot])cherry_stem(KeyHeight(keyID), slop);
247+
// translate([-Stab/2,0,0])rotate([0,0,stemRot])cherry_stem(KeyHeight(keyID), slop);
242248
//TODO add binding support?
243249
}
244-
#translate([0,0,-.001])skin([for (i=[0:stemLayers-1]) transform(translation(StemTranslation(i,keyID))*rotation(StemRotation(i, keyID)), rounded_rectangle_profile(StemTransform(i, keyID),fn=fn,r=StemRadius(i, keyID)))]); //Transition Support for taller profile
250+
rotate([0,0,StemRot])translate([0,0,-.001])skin([for (i=[0:stemLayers-1]) transform(translation(StemTranslation(i,keyID))*rotation(StemRotation(i, keyID)), rounded_rectangle_profile(StemTransform(i, keyID),fn=fn,r=StemRadius(i, keyID)))]); //Transition Support for taller profile
245251
}
246252
//cut for fonts and extra pattern for light?
247253
}
@@ -274,78 +280,30 @@ module keycap(keyID = 0, cutLen = 0, visualizeDish = false, rossSection = false,
274280
//------------------stems
275281
$fn = fn;
276282

277-
function outer_cherry_stem(slop) = [ stemWid - slop * 2, stemLen - slop * 2];
278-
function outer_cherry_stabilizer_stem(slop) = [4.85 - slop * 2, 6.05 - slop * 2];
279-
function outer_box_cherry_stem(slop) = [6 - slop, 6 - slop];
280-
281-
// .005 purely for aesthetics, to get rid of that ugly crosshatch
282-
function cherry_cross(slop, extra_vertical = 0) = [
283-
// horizontal tine
284-
[4.03 + slop, 1.15 + slop / 3],
285-
// vertical tine
286-
[1.25 + slop / 3, 4.23 + extra_vertical + slop / 3 + .005],
287-
];
288-
module inside_cherry_cross(slop) {
289-
// inside cross
290-
// translation purely for aesthetic purposes, to get rid of that awful lattice
291-
translate([0,0,-0.005]) {
292-
linear_extrude(height = stemCrossHeight) {
293-
square(cherry_cross(slop, extra_vertical)[0], center=true);
294-
square(cherry_cross(slop, extra_vertical)[1], center=true);
295-
}
296-
}
297-
298-
// Guides to assist insertion and mitigate first layer squishing
299-
{
300-
for (i = cherry_cross(slop, extra_vertical)) hull() {
301-
linear_extrude(height = 0.01, center = false) offset(delta = 0.4) square(i, center=true);
302-
translate([0, 0, 0.5]) linear_extrude(height = 0.01, center = false) square(i, center=true);
303-
}
304-
}
305-
}
306-
307-
module cherry_stem(depth, slop) {
308-
D1=.15;
309-
D2=.05;
310-
H1=3.5;
311-
CrossDist = 1.75;
312-
difference(){
313-
// outside shape
314-
linear_extrude(height = depth) {
315-
offset(r=1){
316-
square(outer_cherry_stem(slop) - [2,2], center=true);
317-
}
318-
}
319-
inside_cherry_cross(slop);
320-
hull(){
321-
translate([CrossDist,CrossDist-.1,0])cylinder(d1=D1, d2=D2, H1);
322-
translate([-CrossDist,-CrossDist+.1,0])cylinder(d1=D1, d2=D2, H1);
323-
}
324-
hull(){
325-
translate([-CrossDist,CrossDist-.1])cylinder(d1=D1, d2=D2, H1);
326-
translate([CrossDist,-CrossDist+.1])cylinder(d1=D1, d2=D2, H1);
327-
}
328-
}
329-
}
330-
331-
module choc_stem(draftAng = 2) {
332-
stemHeinght = 3.1;
333-
283+
module choc_stem(draftAng = 5) {
284+
stemHeight = 3.1;
285+
dia = .15;
286+
wids = 1.2/2;
287+
lens = 2.9/2;
334288
module Stem() {
335289
difference(){
336-
hull(){
337-
translate([0,0,-stemHeinght/2])cube([1.25-sin(draftAng)*stemHeinght,3-sin(draftAng)*stemHeinght,.001], center= true);
338-
translate([0,0,stemHeinght/2])cube([1.25,3,.001], center= true);
290+
translate([0,0,-stemHeight/2])linear_extrude(height = stemHeight)hull(){
291+
translate([wids-dia,-3/2])circle(d=dia);
292+
translate([-wids+dia,-3/2])circle(d=dia);
293+
translate([wids-dia, 3/2])circle(d=dia);
294+
translate([-wids+dia, 3/2])circle(d=dia);
339295
}
340-
//cuts
341-
translate([3.9,0])cylinder(d1=7+sin(draftAng)*stemHeinght, d2=7,3.5, center = true);
342-
translate([-3.9,0])cylinder(d1=7+sin(draftAng)*stemHeinght,d2=7,3.5, center = true);
296+
297+
//cuts
298+
translate([3.9,0])cylinder(d1=7+sin(draftAng)*stemHeight, d2=7,3.5, center = true, $fn = 64);
299+
translate([-3.9,0])cylinder(d1=7+sin(draftAng)*stemHeight,d2=7,3.5, center = true, $fn = 64);
343300
}
344301
}
345302

346-
translate([5.7/2,0,-stemHeinght/2+2])Stem();
347-
translate([-5.7/2,0,-stemHeinght/2+2])Stem();
303+
translate([5.7/2,0,-stemHeight/2+2])Stem();
304+
translate([-5.7/2,0,-stemHeight/2+2])Stem();
348305
}
306+
349307
/// ----- helper functions
350308
function rounded_rectangle_profile(size=[1,1],r=1,fn=32) = [
351309
for (index = [0:fn-1])
@@ -390,3 +348,27 @@ function sign_y(i,n) =
390348
i > 0 && i < n/2 ? 1 :
391349
i > n/2 ? -1 :
392350
0;
351+
352+
//lp_key = [
353+
//// "base_sx", 18.5,
354+
//// "base_sy", 18.5,
355+
// "base_sx", 17.65,
356+
// "base_sy", 16.5,
357+
// "cavity_sx", 16.1,
358+
// "cavity_sy", 14.9,
359+
// "cavity_sz", 1.6,
360+
// "cavity_ch_xy", 1.6,
361+
// "indent_inset", 1.5
362+
// ];
363+
//Choc Chord version Chicago Stenographer
364+
//#square([18.16, 18.16], center = true);
365+
//translate([0,19,0])keycap(keyID = 1, cutLen = 0, Stem =false, Dish = true, Stab = 0 , visualizeDish = true, crossSection = false, homeDot = false, Legends = false);
366+
//translate([0,0,0])lp_master_base(xu = 2, yu = 1 );
367+
//stem_cavity_negative(lp_key, x=1, y=1);
368+
//}
369+
//#translate([0,0,0])cube([14.5, 13.5, 10], center = true); // internal check
370+
//#translate([0,0,0])cube([17.5, 16.5, 10], center = true); // external check
371+
//translate([0,17,0])mirror([0,1,0])keycap(keyID = 0, cutLen = 0, Stem =false, Dish = true, Stab = 0 , visualizeDish = false, crossSection = false, homeDot = false, Legends = false);
372+
//translate([18,0,0])mirror([0,0,0])keycap(keyID = 0, cutLen = 0, Stem =false, Dish = true, Stab = 0 , visualizeDish = false, crossSection = false, homeDot = false, Legends = false);
373+
//n translate([0,19, 0])keycap(keyID = 3, cutLen = 0, Stem =true, Dish = true, visualizeDish = true, crossSection = true, homeDot = false, Legends = false);
374+
// translate([0,38, 0])mirror([0,1,0])keycap(keyID = 2, cutLen = 0, Stem =true, Dish = true, visualizeDish = false, crossSection = true, homeDot = false, Legends = false);

0 commit comments

Comments
 (0)