Skip to content

Commit 315b380

Browse files
committed
inner snap
1 parent f9e31d0 commit 315b380

File tree

2 files changed

+56
-27
lines changed

2 files changed

+56
-27
lines changed

cases/case1.scad

Lines changed: 52 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ kickstand_height_percentage = 65;
129129
kickstand_leg_bridge_offset_percentage = 15;
130130
kickstand_leg_bridge_height = 7;
131131
kickstand_depth = 7;
132-
kickstand_bottom_start = 3;
132+
kickstand_bottom_start = 2;
133133
kickstand_wall_thickness = 1;
134134
kickstand_gap_thickness = 0.5;
135135
kickstand_hinge_diameter = 2.2;
@@ -138,6 +138,12 @@ kickstand_hinge_top_extra_leverage = 3; // Height added to the flap above the hi
138138
kickstand_hinge_wall_padding = 0.2; // Distance from the back wall
139139
kickstand_hinge_cylinder_gap = 0.5; // Gap between the hinge and the cylinder
140140
kickstand_rotation = 0; // Kickstand rotation angle, goes up to 35 when open
141+
kickstand_inner_snap = true;
142+
kickstand_inner_snap_reverse = true;
143+
kickstand_inner_snap_height_percentage = 50;
144+
kickstand_inner_snap_radius_hole = 1.0;
145+
kickstand_inner_snap_radius_ball = 1.5;
146+
kickstand_inner_snap_gap = 1.2;
141147

142148
/* [USB cutout] */
143149

@@ -882,17 +888,17 @@ module caseWithKickstand() {
882888
}
883889

884890
// The kickstand itself
885-
difference() {
886-
union() {
891+
difference () {
892+
union () {
887893
// Legs
888-
for (x = leg_x_starts_leg) {
894+
for (index=[0:1]) {
889895
// Render the leg's top cylinder over the hinge
890-
translate([x, hinge_start[1], hinge_start[2]])
896+
translate([leg_x_starts_leg[index], hinge_start[1], hinge_start[2]])
891897
rotate([90, 0, 90])
892898
cylinder(d = hinge_real_depth, h = kickstand_leg_width);
893899

894900
// Render the large leg top
895-
translate([x, hinge_start[1], hinge_start[2]])
901+
translate([leg_x_starts_leg[index], hinge_start[1], hinge_start[2]])
896902
rotate([kickstand_rotation, 0, 0])
897903
cubeWithAngledTopBottom(
898904
loc=[
@@ -908,21 +914,29 @@ module caseWithKickstand() {
908914
);
909915

910916
// Render the large leg
911-
translate([x, hinge_start[1], hinge_start[2]])
912-
rotate([kickstand_rotation, 0, 0])
913-
cubeWithAngledTopBottom(
914-
loc=[
915-
0,
916-
leg_yz[0] - hinge_start[1] + hinge_top_offset - kickstand_hinge_diameter,
917-
leg_yz[1] - hinge_start[2]
918-
],
919-
size=[
920-
kickstand_leg_width,
921-
kickstand_height - kickstand_gap_thickness - kickstand_wall_thickness * 2 - kickstand_gap_thickness - hinge_top_offset + kickstand_hinge_diameter - leg_depth,
922-
leg_depth
923-
],
924-
bottom=true
925-
);
917+
difference() {
918+
translate([leg_x_starts_leg[index], hinge_start[1], hinge_start[2]])
919+
rotate([kickstand_rotation, 0, 0])
920+
cubeWithAngledTopBottom(
921+
loc=[
922+
0,
923+
leg_yz[0] - hinge_start[1] + hinge_top_offset - kickstand_hinge_diameter,
924+
leg_yz[1] - hinge_start[2]
925+
],
926+
size=[
927+
kickstand_leg_width,
928+
kickstand_height - kickstand_gap_thickness - kickstand_wall_thickness * 2 - kickstand_gap_thickness - hinge_top_offset + kickstand_hinge_diameter - leg_depth,
929+
leg_depth
930+
],
931+
bottom=true
932+
);
933+
if (kickstand_inner_snap) {
934+
translate([leg_x_starts_leg[index] + (index == (kickstand_inner_snap_reverse ? 1 : 0) ? kickstand_leg_width : 0), hinge_start[1], hinge_start[2] - kickstand_gap_thickness])
935+
rotate([kickstand_rotation, 0, 0])
936+
translate([0, kickstand_inner_snap_height_percentage / 100 * (kickstand_height - kickstand_gap_thickness - kickstand_wall_thickness * 2 - kickstand_gap_thickness - hinge_top_offset + kickstand_hinge_diameter - leg_depth), 0])
937+
sphere(d = kickstand_inner_snap_radius_hole * 2);
938+
}
939+
}
926940
}
927941
// Render the leg bridge
928942
translate([0, hinge_start[1], hinge_start[2]])
@@ -955,11 +969,25 @@ module caseWithKickstand() {
955969
cylinder(d = kickstand_hinge_diameter + kickstand_hinge_cylinder_gap * 2, h = kickstand_width + 0.22);
956970
}
957971

958-
// Render a cylinder as a hinge
959-
for (x = leg_x_starts_full) {
960-
translate([x, hinge_start[1], hinge_start[2]])
972+
for (index=[0:1]) {
973+
// Render a cylinder as a hinge
974+
translate([leg_x_starts_full[index], hinge_start[1], hinge_start[2]])
961975
rotate([90, 0, 90])
962976
cylinder(d = kickstand_hinge_diameter, h = kickstand_leg_full_width - 0.22);
977+
978+
// Render the snaps for the legs
979+
if (kickstand_inner_snap) {
980+
translate([
981+
leg_x_starts_leg[index] + (index == (kickstand_inner_snap_reverse ? 1 : 0) ? kickstand_leg_width : 0) + (index == (kickstand_inner_snap_reverse ? 1 : 0) ? kickstand_inner_snap_gap : - kickstand_inner_snap_gap),
982+
hinge_start[1] + kickstand_inner_snap_height_percentage / 100 * (kickstand_height - kickstand_gap_thickness - kickstand_wall_thickness * 2 - kickstand_gap_thickness - hinge_top_offset + kickstand_hinge_diameter - leg_depth),
983+
hinge_start[2] - kickstand_gap_thickness
984+
])
985+
intersection() {
986+
sphere(d = kickstand_inner_snap_radius_ball * 2);
987+
translate([-kickstand_inner_snap_radius_hole * 2 + (index == (kickstand_inner_snap_reverse ? 1 : 0) ? 0 : +kickstand_inner_snap_radius_hole * 2), -kickstand_inner_snap_radius_hole * 2, -kickstand_inner_snap_radius_hole * 2])
988+
cube([kickstand_inner_snap_radius_hole * 2, kickstand_inner_snap_radius_hole * 4, kickstand_inner_snap_radius_hole * 4]);
989+
}
990+
}
963991
}
964992
}
965993

cases/waveshare.7in3e.scad

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@ screw_offset_right = 4.4;
4343
screw_offset_top = 4.2;
4444
screw_offset_bottom = 4.2;
4545

46-
extra_screws_top = [0, 0, 0, 0, 0];
47-
extra_screws_bottom = [0, 0, 0, 0, 0];
46+
extra_screws_top = [0.5, 0, 0, 0, 0];
47+
extra_screws_bottom = [0.35, 0.65, 0, 0, 0];
4848
extra_screws_left = [0, 0, 0, 0, 0];
4949
extra_screws_right = [0, 0, 0, 0, 0];
5050

@@ -65,10 +65,11 @@ usb_cutout_offset_x_percentage = 92;
6565
usb_cutout_offset_y_percentage = 70;
6666
usb_cutout_box_depth = 6.4;
6767
usb_cutout_hole_height = 5.8;
68+
usb_cutout_hole_width = 14;
6869

6970
/* [Hanging hole] */
7071
hanging_hole = true;
71-
hanging_hole_offset = 4;
72+
hanging_hole_offset = 7;
7273

7374
/* [SD card adapter cutout] */
7475
sd_card_in_leg = true;

0 commit comments

Comments
 (0)