@@ -5,44 +5,33 @@ use <scad-utils/trajectory.scad>
5
5
use < scad- utils/trajectory_path.scad>
6
6
use < sweep.scad>
7
7
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
+ );
34
24
35
25
// Parameters
36
26
wallthickness = 1.2 ;
37
- topthickness = 3 ; //
27
+ topthickness = 2 ; //
38
28
stepsize = 50 ; // resolution of Trajectory
39
29
step = 1 ; // resolution of ellipes
40
30
fn = 32 ; // resolution of Rounded Rectangles: 60 for output
41
31
layers = 40 ; // resolution of vertical Sweep: 50 for output
42
32
dotRadius = 1.25 ; // home dot size
43
33
// ---Stem param
44
34
slop = 0.25 ;
45
- stemRot = 0 ;
46
35
stemWid = 8 ;
47
36
stemLen = 6 ;
48
37
stemCrossHeight = 1.8 ;
@@ -54,22 +43,39 @@ driftAngle = 0;
54
43
keyParameters = // keyParameters[KeyID][ParameterID]
55
44
[
56
45
// 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
65
70
];
66
71
67
72
dishParameters = // dishParameter[keyID][ParameterID]
68
73
[
69
74
// 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
73
79
[ 4 , 4.2 , - 5 , - 15 , 1 , 3 , 18.2 , 21 , 2 , 5 , 3 , - 5 , - 15 , 18.2 , 21 , 2 ], // R3 2u
74
80
[ 4 ., 1.5 , 8 , - 55 , 3 , 7 , 9.0 , 9 , 2 , 4 , 3 , 3 , - 50 , 9 , 9 , 2 ], // R3
75
81
[ 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))
210
216
211
217
212
218
// /----- 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) {
214
220
215
221
// Set Parameters for dish shape
216
222
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,
235
241
}
236
242
}
237
243
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();
239
245
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);
242
248
// TODO add binding support?
243
249
}
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
245
251
}
246
252
// cut for fonts and extra pattern for light?
247
253
}
@@ -274,78 +280,30 @@ module keycap(keyID = 0, cutLen = 0, visualizeDish = false, rossSection = false,
274
280
// ------------------stems
275
281
$ fn = fn;
276
282
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 ;
334
288
module Stem() {
335
289
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);
339
295
}
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 );
343
300
}
344
301
}
345
302
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();
348
305
}
306
+
349
307
// / ----- helper functions
350
308
function rounded_rectangle_profile(size= [1 ,1 ],r= 1 ,fn= 32 ) = [
351
309
for (index = [0 :fn- 1 ])
@@ -390,3 +348,27 @@ function sign_y(i,n) =
390
348
i > 0 && i < n/2 ? 1 :
391
349
i > n/2 ? - 1 :
392
350
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