@@ -5,44 +5,33 @@ use <scad-utils/trajectory.scad>
55use < scad- utils/trajectory_path.scad>
66use < sweep.scad>
77use < 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
3626wallthickness = 1.2 ;
37- topthickness = 3 ; //
27+ topthickness = 2 ; //
3828stepsize = 50 ; // resolution of Trajectory
3929step = 1 ; // resolution of ellipes
4030fn = 32 ; // resolution of Rounded Rectangles: 60 for output
4131layers = 40 ; // resolution of vertical Sweep: 50 for output
4232dotRadius = 1.25 ; // home dot size
4333// ---Stem param
4434slop = 0.25 ;
45- stemRot = 0 ;
4635stemWid = 8 ;
4736stemLen = 6 ;
4837stemCrossHeight = 1.8 ;
@@ -54,22 +43,39 @@ driftAngle = 0;
5443keyParameters = // 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
6772dishParameters = // 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
350308function 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