diff --git a/customizer.scad b/customizer.scad index 34e9148..682c6c4 100644 --- a/customizer.scad +++ b/customizer.scad @@ -178,6 +178,9 @@ $inset_legend_depth = 0.2; // Dimensions of alps stem $alps_stem = [4.45, 2.25]; +// Dimensions of choc stem +$choc_stem = [1.2, 3]; + // Enable stabilizer stems, to hold onto your cherry or costar stabilizers $stabilizer_type = "costar_stabilizer"; // [costar_stabilizer, cherry_stabilizer, disable] @@ -858,6 +861,12 @@ module box_cherry(slop) { children(); } +module choc(slop) { + $stem_slop = slop ? slop : $stem_slop; + $stem_type = "choc"; + children(); +} + module flared_support() { $support_type = "flared"; children(); @@ -925,6 +934,14 @@ module debug() { %children(); } + +module low_profile() { + /* $total_depth = 5.35; */ + /* extra ugly hack right now to make sure we don't generate keycaps with insufficient throw */ + /* $total_depth = ($total_depth / 2) < 6 ? 6 : $total_depth / 2; */ + $stem_throw = 3; + children(); +} module arrows(profile, rows = [4,4,4,3]) { positions = [[0, 0], [1, 0], [2, 0], [1, 1]]; legends = ["←", "↓", "→", "↑"]; @@ -2078,6 +2095,12 @@ module cherry_stabilizer_stem(depth, slop) { inside_cherry_stabilizer_cross(slop); } } +module choc_stem(depth, slop){ + echo("slop"); + echo(slop); + translate([-5.7/2, 0, depth/2]) cube([1.2 - slop/2, 3 - slop/2, depth], center=true); + translate([5.7/2, 0, depth/2]) cube([1.2 - slop/2, 3 - slop/2, depth], center=true); +} //whole stem, alps or cherry, trimmed to fit @@ -2094,6 +2117,8 @@ module stem(stem_type, depth, slop){ filled_stem(); } else if (stem_type == "cherry_stabilizer") { cherry_stabilizer_stem(depth, slop); + } else if (stem_type == "choc") { + choc_stem(depth, slop); } else if (stem_type == "disable") { children(); } else { @@ -2322,6 +2347,18 @@ module brim_support(stem_type, stem_support_height, slop) { inside_cherry_cross(slop); } + } else if(stem_type == "choc") { + translate([-5.7/2,0,0]) linear_extrude(height=stem_support_height) { + offset(r=1){ + square($choc_stem + [3,3], center=true); + } + } + + translate([5.7/2,0,0]) linear_extrude(height=stem_support_height) { + offset(r=1){ + square($choc_stem + [3,3], center=true); + } + } } } // a safe theoretical distance between two vertices such that they don't collapse. hard to use @@ -2579,6 +2616,10 @@ module tines_support(stem_type, stem_support_height, slop) { } } else if (stem_type == "alps"){ centered_tines(stem_support_height); + } else if (stem_type == "choc"){ + if ($key_length < 2) translate([0,0,$stem_support_height / 2]) cube([total_key_width($wall_thickness)+$wall_thickness/4, 0.5, $stem_support_height], center = true); + /* translate([-5.7/2,0,$stem_support_height / 2]) cube([0.5, total_key_height($wall_thickness), $stem_support_height], center = true); */ + /* translate([5.7/2,0,$stem_support_height / 2]) cube([0.5, total_key_height($wall_thickness), $stem_support_height], center = true); */ } } @@ -2932,6 +2973,15 @@ module flared(stem_type, loft, height) { square(outer_cherry_stabilizer_stem($stem_slop) - [2,2], center=true); } } + } else if (stem_type == "choc") { + alps_scale = [scale_for_45(height, $choc_stem[0]), scale_for_45(height, $choc_stem[1])]; + translate([-5.7/2,0,0]) linear_extrude(height=height, scale = alps_scale){ + square($choc_stem - [$stem_slop/2, $stem_slop/2], center=true); + } + + translate([5.7/2,0,0]) linear_extrude(height=height, scale = alps_scale){ + square($choc_stem - [$stem_slop/2, $stem_slop/2], center=true); + } } else { // always render cherry if no stem type. this includes stem_type = false! // this avoids a bug where the keycap is rendered filled when not desired @@ -4473,6 +4523,9 @@ $inset_legend_depth = 0.2; // Dimensions of alps stem $alps_stem = [4.45, 2.25]; +// Dimensions of choc stem +$choc_stem = [1.2, 3]; + // Enable stabilizer stems, to hold onto your cherry or costar stabilizers $stabilizer_type = "costar_stabilizer"; // [costar_stabilizer, cherry_stabilizer, disable] diff --git a/keys.scad b/keys.scad index 768110e..309c977 100644 --- a/keys.scad +++ b/keys.scad @@ -8,13 +8,15 @@ include <./includes.scad> -// example key -dcs_row(5) legend("⇪", size=9) key(); -// example row -/* for (x = [0:1:4]) { - translate_u(0,-x) dcs_row(x) key(); -} */ -// example layout -/* preonic_default("dcs"); */ \ No newline at end of file +u(1) choc() { + tined_stem_support() sa_row(1){ + $stem_support_height = 2; + low_profile() { + key(); + } + } +} + +/* translate_u(1,0) u(1) choc() row_profile("oem") low_profile() key(); */ diff --git a/src/key_transformations.scad b/src/key_transformations.scad index 9bce421..f008e21 100644 --- a/src/key_transformations.scad +++ b/src/key_transformations.scad @@ -109,6 +109,12 @@ module box_cherry(slop) { children(); } +module choc(slop) { + $stem_slop = slop ? slop : $stem_slop; + $stem_type = "choc"; + children(); +} + module flared_support() { $support_type = "flared"; children(); @@ -176,3 +182,11 @@ module debug() { %children(); } + +module low_profile() { + /* $total_depth = 5.35; */ + /* extra ugly hack right now to make sure we don't generate keycaps with insufficient throw */ + /* $total_depth = ($total_depth / 2) < 6 ? 6 : $total_depth / 2; */ + $stem_throw = 3; + children(); +} diff --git a/src/settings.scad b/src/settings.scad index 1ed877f..dc67900 100644 --- a/src/settings.scad +++ b/src/settings.scad @@ -163,6 +163,9 @@ $inset_legend_depth = 0.2; // Dimensions of alps stem $alps_stem = [4.45, 2.25]; +// Dimensions of choc stem +$choc_stem = [1.2, 3]; + // Enable stabilizer stems, to hold onto your cherry or costar stabilizers $stabilizer_type = "costar_stabilizer"; // [costar_stabilizer, cherry_stabilizer, disable] diff --git a/src/stem_supports/brim.scad b/src/stem_supports/brim.scad index 97ae5dc..372fcf3 100644 --- a/src/stem_supports/brim.scad +++ b/src/stem_supports/brim.scad @@ -43,5 +43,17 @@ module brim_support(stem_type, stem_support_height, slop) { inside_cherry_cross(slop); } + } else if(stem_type == "choc") { + translate([-5.7/2,0,0]) linear_extrude(height=stem_support_height) { + offset(r=1){ + square($choc_stem + [3,3], center=true); + } + } + + translate([5.7/2,0,0]) linear_extrude(height=stem_support_height) { + offset(r=1){ + square($choc_stem + [3,3], center=true); + } + } } } diff --git a/src/stem_supports/tines.scad b/src/stem_supports/tines.scad index 56ff739..e3385fd 100644 --- a/src/stem_supports/tines.scad +++ b/src/stem_supports/tines.scad @@ -77,5 +77,9 @@ module tines_support(stem_type, stem_support_height, slop) { } } else if (stem_type == "alps"){ centered_tines(stem_support_height); + } else if (stem_type == "choc"){ + if ($key_length < 2) translate([0,0,$stem_support_height / 2]) cube([total_key_width($wall_thickness)+$wall_thickness/4, 0.5, $stem_support_height], center = true); + /* translate([-5.7/2,0,$stem_support_height / 2]) cube([0.5, total_key_height($wall_thickness), $stem_support_height], center = true); */ + /* translate([5.7/2,0,$stem_support_height / 2]) cube([0.5, total_key_height($wall_thickness), $stem_support_height], center = true); */ } } diff --git a/src/stems.scad b/src/stems.scad index c53ab91..473c10a 100644 --- a/src/stems.scad +++ b/src/stems.scad @@ -4,6 +4,7 @@ include include include include +include //whole stem, alps or cherry, trimmed to fit @@ -20,6 +21,8 @@ module stem(stem_type, depth, slop){ filled_stem(); } else if (stem_type == "cherry_stabilizer") { cherry_stabilizer_stem(depth, slop); + } else if (stem_type == "choc") { + choc_stem(depth, slop); } else if (stem_type == "disable") { children(); } else { diff --git a/src/stems/choc.scad b/src/stems/choc.scad new file mode 100644 index 0000000..1589880 --- /dev/null +++ b/src/stems/choc.scad @@ -0,0 +1,6 @@ +module choc_stem(depth, slop){ + echo("slop"); + echo(slop); + translate([-5.7/2, 0, depth/2]) cube([1.2 - slop/2, 3 - slop/2, depth], center=true); + translate([5.7/2, 0, depth/2]) cube([1.2 - slop/2, 3 - slop/2, depth], center=true); +} diff --git a/src/supports/flared.scad b/src/supports/flared.scad index 50dd5c5..03c0e8f 100644 --- a/src/supports/flared.scad +++ b/src/supports/flared.scad @@ -40,6 +40,15 @@ module flared(stem_type, loft, height) { square(outer_cherry_stabilizer_stem($stem_slop) - [2,2], center=true); } } + } else if (stem_type == "choc") { + alps_scale = [scale_for_45(height, $choc_stem[0]), scale_for_45(height, $choc_stem[1])]; + translate([-5.7/2,0,0]) linear_extrude(height=height, scale = alps_scale){ + square($choc_stem - [$stem_slop/2, $stem_slop/2], center=true); + } + + translate([5.7/2,0,0]) linear_extrude(height=height, scale = alps_scale){ + square($choc_stem - [$stem_slop/2, $stem_slop/2], center=true); + } } else { // always render cherry if no stem type. this includes stem_type = false! // this avoids a bug where the keycap is rendered filled when not desired