Compare commits
1 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
07f0c8608a |
139
src/main.py
139
src/main.py
|
|
@ -38,7 +38,8 @@ MOUNT_HEIGHT = KEYSWITCH_HEIGHT
|
||||||
MOUNT_WIDTH = KEYSWITCH_WIDTH
|
MOUNT_WIDTH = KEYSWITCH_WIDTH
|
||||||
# use 10 for faster prototyping, 15 for real
|
# use 10 for faster prototyping, 15 for real
|
||||||
TENTING_ANGLE = 11.0
|
TENTING_ANGLE = 11.0
|
||||||
Z_OFFSET = 9.0
|
# This affects the height of the keyboard
|
||||||
|
Z_OFFSET = 11.0
|
||||||
|
|
||||||
SHOULD_INCLUDE_RISERS = False
|
SHOULD_INCLUDE_RISERS = False
|
||||||
|
|
||||||
|
|
@ -1049,16 +1050,16 @@ def screw_insert(col, row, shape, ox, oy):
|
||||||
|
|
||||||
def screw_insert_all_shapes(shape):
|
def screw_insert_all_shapes(shape):
|
||||||
return union(
|
return union(
|
||||||
screw_insert(2, 0, shape, -5.3, 5.9),
|
screw_insert(2, 0, shape, -5.3, 5.9), # On the same side as the usb hole
|
||||||
screw_insert(NUM_COLS - 1, 0, shape, 6.7, 5.5),
|
screw_insert(NUM_COLS - 1, 0, shape, 6.7, 5.5), # Upper pinky corner
|
||||||
screw_insert(NUM_COLS - 1, num_rows_for_col(NUM_COLS - 1), shape, 6.8, 14.4),
|
screw_insert(NUM_COLS - 1, num_rows_for_col(NUM_COLS - 1), shape, 6.8, 14.4), # Lower pinky corner
|
||||||
screw_insert(0, 0, shape, -6.2, -8),
|
screw_insert(0, 0, shape, -6.2, -8), # near the TRRS hole
|
||||||
screw_insert(1, MAX_NUM_ROWS + 1, shape, -9.8, 3.4),
|
screw_insert(1, MAX_NUM_ROWS + 1, shape, -9.8, 3.4), # Thumb inwards
|
||||||
screw_insert(0, MAX_NUM_ROWS - 1, shape, -17.4, -2),
|
screw_insert(0, MAX_NUM_ROWS - 1, shape, -17.4, -2), # Thumb outwards
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
TRRS_HOLDER_SIZE = [6.0, 11.0, 7.0]
|
TRRS_HOLDER_SIZE = [6.0, 14.0, 7.0]
|
||||||
TRRS_HOLE_SIZE = [2.6, 10.0]
|
TRRS_HOLE_SIZE = [2.6, 10.0]
|
||||||
TRRS_HOLDER_THICKNESS = 2.5
|
TRRS_HOLDER_THICKNESS = 2.5
|
||||||
TRRS_FRONT_THICKNESS = 1.8
|
TRRS_FRONT_THICKNESS = 1.8
|
||||||
|
|
@ -1066,35 +1067,44 @@ TRRS_FRONT_THICKNESS = 1.8
|
||||||
|
|
||||||
def trrs_key_holder_position():
|
def trrs_key_holder_position():
|
||||||
base_place = point_on_grid(0, 0, 0, KEYSWITCH_WIDTH / 2, 0)
|
base_place = point_on_grid(0, 0, 0, KEYSWITCH_WIDTH / 2, 0)
|
||||||
return [base_place[0] - 5, base_place[1] + 1.43, 9.0]
|
return [base_place[0] - 5, base_place[1] + 1.43, 13.0]
|
||||||
|
|
||||||
|
|
||||||
def trrs_holder():
|
def trrs_holder():
|
||||||
|
x, y, z = TRRS_HOLDER_SIZE
|
||||||
shape = cube(
|
shape = cube(
|
||||||
TRRS_HOLDER_SIZE[0] + TRRS_HOLDER_THICKNESS,
|
x + TRRS_HOLDER_THICKNESS,
|
||||||
TRRS_HOLDER_SIZE[1] + TRRS_FRONT_THICKNESS,
|
y + TRRS_FRONT_THICKNESS,
|
||||||
TRRS_HOLDER_SIZE[2] + TRRS_HOLDER_THICKNESS * 2,
|
z + TRRS_HOLDER_THICKNESS - 3 ,
|
||||||
)
|
)
|
||||||
|
|
||||||
placed_shape = translate(
|
placed_shape = translate(
|
||||||
-TRRS_HOLDER_SIZE[0] / 2,
|
-x / 2 - 1,
|
||||||
-TRRS_HOLDER_SIZE[1],
|
-y,
|
||||||
-(TRRS_HOLDER_SIZE[2] / 2 + TRRS_HOLDER_THICKNESS),
|
-(z / 3 + TRRS_HOLDER_THICKNESS),
|
||||||
)(shape)
|
)(shape)
|
||||||
|
|
||||||
return translate(*trrs_key_holder_position())(placed_shape)
|
blocker = cube(x + TRRS_HOLDER_THICKNESS, 5, 5)
|
||||||
|
blocker = translate(-x, -y - 2 * TRRS_HOLDER_THICKNESS, -z + 2)(blocker)
|
||||||
|
|
||||||
|
return translate(*trrs_key_holder_position())(
|
||||||
|
union(
|
||||||
|
placed_shape,
|
||||||
|
blocker,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def trrs_holder_hole():
|
def trrs_holder_hole():
|
||||||
x, y, z = TRRS_HOLDER_SIZE
|
x, y, z = TRRS_HOLDER_SIZE
|
||||||
rect_hole = cube(x, y, z)
|
rect_hole = cube(x, y + 2, z)
|
||||||
rect_hole = translate(
|
rect_hole = translate(
|
||||||
-x / 2, -y - 1, -z / 2,
|
-x / 2, -y - 1.3 , -z / 2,
|
||||||
)(rect_hole)
|
)(rect_hole)
|
||||||
|
|
||||||
rect2 = cube(x, y, z - 3)
|
rect2 = cube(x, y + 1, z)
|
||||||
rect2 = translate(
|
rect2 = translate(
|
||||||
-x / 2 + 5, -y - 1, -z / 3,
|
-x / 2, -y - 1.5, -z + 7,
|
||||||
)(rect2)
|
)(rect2)
|
||||||
|
|
||||||
cylinder_hole = cylinder(*TRRS_HOLE_SIZE, segments=30)
|
cylinder_hole = cylinder(*TRRS_HOLE_SIZE, segments=30)
|
||||||
|
|
@ -1105,10 +1115,11 @@ def trrs_holder_hole():
|
||||||
*trrs_key_holder_position()
|
*trrs_key_holder_position()
|
||||||
)(
|
)(
|
||||||
union(
|
union(
|
||||||
union(
|
rect_hole,
|
||||||
rect_hole,
|
# union(
|
||||||
rect2,
|
# rect_hole,
|
||||||
),
|
# rect2,
|
||||||
|
# ),
|
||||||
cylinder_hole
|
cylinder_hole
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
@ -1202,7 +1213,7 @@ def right_shell():
|
||||||
global SHOULD_INCLUDE_RISERS
|
global SHOULD_INCLUDE_RISERS
|
||||||
SHOULD_INCLUDE_RISERS = True
|
SHOULD_INCLUDE_RISERS = True
|
||||||
|
|
||||||
cover = translate(-60, 20, 0)(cube(15, 15, 20))
|
# cover = translate(-60, 20, 0)(cube(15, 15, 20))
|
||||||
|
|
||||||
full_proto = difference(
|
full_proto = difference(
|
||||||
union(
|
union(
|
||||||
|
|
@ -1269,8 +1280,8 @@ def model_outline():
|
||||||
return extrude_linear(bottom_height)(bottom_2d)
|
return extrude_linear(bottom_height)(bottom_2d)
|
||||||
|
|
||||||
|
|
||||||
weight_width = 19.5
|
weight_width = 40
|
||||||
weight_height = 16.5
|
weight_height = 40
|
||||||
|
|
||||||
weight_z_offset = 0.5
|
weight_z_offset = 0.5
|
||||||
|
|
||||||
|
|
@ -1292,44 +1303,21 @@ def place_weight_hole(x, y):
|
||||||
def bottom_weight_cutouts():
|
def bottom_weight_cutouts():
|
||||||
shapes = []
|
shapes = []
|
||||||
|
|
||||||
base_point = point_on_grid(0, NUM_COLS - 1, 0, 0, 0)
|
base_point = point_on_grid(1, NUM_COLS - 1, 0, 0, 0)
|
||||||
base_x = base_point[0] - 9
|
base_x = base_point[0] - 13.6
|
||||||
base_y = base_point[1] - 4
|
base_y = base_point[1]
|
||||||
|
|
||||||
space_between = 1
|
space_between = 0
|
||||||
offsets = space_between + weight_width
|
offsets = space_between + weight_width
|
||||||
offsets_y = space_between + weight_height
|
|
||||||
|
|
||||||
r3_y = base_y - 2 * offsets_y
|
weight_1 = place_weight_hole(base_x, base_y + 4)
|
||||||
|
weight_2 = place_weight_hole(base_x - offsets, base_y + 8)
|
||||||
|
|
||||||
topr = base_y + offsets_y
|
weight_1 = rotate_z(-3)(weight_1)
|
||||||
|
weight_2 = rotate_z(-3)(weight_2)
|
||||||
|
|
||||||
for x in range(2):
|
shapes.append(weight_1)
|
||||||
shapes.append(place_weight_hole(1 + base_x - offsets * x, base_y))
|
shapes.append(weight_2)
|
||||||
for x in range(3, 4):
|
|
||||||
shapes.append(place_weight_hole(base_x - offsets * x + 2, base_y))
|
|
||||||
for x in range(4, 5):
|
|
||||||
shapes.append(place_weight_hole(base_x - offsets * x - 8, base_y))
|
|
||||||
|
|
||||||
for x in range(2, 5):
|
|
||||||
shapes.append(place_weight_hole(base_x - offsets * x - 4, base_y - offsets_y))
|
|
||||||
|
|
||||||
for x in range(5):
|
|
||||||
shapes.append(place_weight_hole(base_x - offsets * x, base_y - 2 * offsets_y))
|
|
||||||
|
|
||||||
shapes.append(place_weight_hole(base_x - offsets * 2, topr))
|
|
||||||
shapes.append(place_weight_hole(base_x - offsets * 3, topr))
|
|
||||||
|
|
||||||
base_thumb_x = base_x - offsets * 4 + 5
|
|
||||||
base_thumb_y = base_y - offsets_y * 3 - weight_width + weight_height + 1
|
|
||||||
|
|
||||||
angled_shape = rotate_z(107)(weight_shape())
|
|
||||||
shapes.append(
|
|
||||||
translate(base_thumb_x - offsets_y - 0.4, base_thumb_y - 9.5, 0)(angled_shape)
|
|
||||||
)
|
|
||||||
shapes.append(
|
|
||||||
translate(base_thumb_x - offsets_y + 16, base_thumb_y - 1, 0)(angled_shape)
|
|
||||||
)
|
|
||||||
|
|
||||||
return union(*shapes)
|
return union(*shapes)
|
||||||
|
|
||||||
|
|
@ -1337,6 +1325,28 @@ def bottom_weight_cutouts():
|
||||||
reset_switch_body = place_reset_switch_shape(unplaced_reset_switch_body())
|
reset_switch_body = place_reset_switch_shape(unplaced_reset_switch_body())
|
||||||
reset_switch_body_hole = place_reset_switch_shape(unplaced_reset_switch_body_hole())
|
reset_switch_body_hole = place_reset_switch_shape(unplaced_reset_switch_body_hole())
|
||||||
|
|
||||||
|
def liatris_stop_block():
|
||||||
|
base_place = point_on_grid(0, 0, 0, KEYSWITCH_WIDTH / 2, 0)
|
||||||
|
x = base_place[0] + 8
|
||||||
|
y = base_place[1] - 30
|
||||||
|
z = base_place[2] - 26
|
||||||
|
|
||||||
|
outer = cube(23, 4, 5)
|
||||||
|
outer = translate(-23/2, -3.5, -3/2)(outer)
|
||||||
|
|
||||||
|
inner = cube(19, 4, 6)
|
||||||
|
inner = translate(-25/2 + 3, -2, -3/2)(inner)
|
||||||
|
|
||||||
|
inner2 = cube(13, 5, 6)
|
||||||
|
inner2 = translate(-25/2 + 6, -7, -3/2)(inner2)
|
||||||
|
|
||||||
|
return translate(x, y, z)(
|
||||||
|
difference(
|
||||||
|
difference(outer, inner),
|
||||||
|
inner2
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def bottom_plate():
|
def bottom_plate():
|
||||||
return difference(
|
return difference(
|
||||||
|
|
@ -1344,16 +1354,17 @@ def bottom_plate():
|
||||||
model_outline(),
|
model_outline(),
|
||||||
# reset_switch_body,
|
# reset_switch_body,
|
||||||
# screw_insert_all_shapes(screw_insert_outer),
|
# screw_insert_all_shapes(screw_insert_outer),
|
||||||
|
liatris_stop_block(),
|
||||||
),
|
),
|
||||||
union(
|
union(
|
||||||
screw_insert_all_shapes(
|
screw_insert_all_shapes(
|
||||||
cylinderr1r2(screw_head_radius, screw_head_radius, screw_head_height)
|
cylinderr1r2(screw_head_radius, screw_head_radius, screw_head_height + 2)
|
||||||
),
|
),
|
||||||
screw_insert_all_shapes(
|
screw_insert_all_shapes(
|
||||||
cylinderr1r2(screw_hole_radius, screw_hole_radius, bottom_height)
|
cylinderr1r2(screw_hole_radius, screw_hole_radius, bottom_height + 2)
|
||||||
),
|
),
|
||||||
# bottom_weight_cutouts(),
|
bottom_weight_cutouts(),
|
||||||
reset_switch_body_hole,
|
# reset_switch_body_hole,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
1280
things/left.scad
1280
things/left.scad
File diff suppressed because it is too large
Load Diff
BIN
things/left.stl
BIN
things/left.stl
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
1280
things/right.scad
1280
things/right.scad
File diff suppressed because it is too large
Load Diff
BIN
things/right.stl
BIN
things/right.stl
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue