1include <BOSL2/std.scad>
2
3wrist_width = 28; //mm
4wrist_thickness = 49; //mm
5wrist_band_thickness = 5; //mm
6wrist_band_length = 35; //mm
7wrist_band_rounding = 4; //mm
8flat_width = 10; //mm
9flat_thickness = 7; //mm
10
11laces_width = 5; //mm
12laces_thickness = 10; //mm
13laces_holes = 3; //mm
14laces_holes_diameter = 6.5; //mm
15laces_hole_spacing = 0; //mm
16
17pick_holder_radius = 50; //mm
18pick_holder_thickness = 7; //mm
19pick_holder_protrusion = 20; //mm
20pick_holder_screws_padding = 1; //mm
21pick_holder_screws_diameter = 2; //mm
22
23logo_depth = 1; //mm
24logo_padding = 1.5; //mm
25text_padding = 1; //mm
26text_size = 2.9; //mm
27text_depth = 1; //mm
28text_content = "T-Shred v0.2";
29text_font = "Iosevka:style=bold";
30
31a_rounding = 1.5; //mm
32b_rounding = 1.5; //mm
33
34tolerances = 0.1; //mm
35
36fix_floating_point_small_value = 0.001; //mm
37
38resolution = 100;
39
40// Code
41non_flat_width = wrist_width-flat_width;
42non_flat_thickness = wrist_thickness-flat_thickness;
43wrist_width_edge = wrist_band_thickness*2+non_flat_width;
44wrist_thickness_edge = wrist_band_thickness*2+non_flat_thickness;
45
46module quarter_wrist_band(){
47translate([flat_width/2-wrist_width_edge/2,flat_thickness/2-wrist_thickness_edge/2,0])
48difference(){
49translate([wrist_width_edge/2,wrist_thickness_edge/2,wrist_band_length/2])
50difference(){
51scale([wrist_width_edge/wrist_thickness_edge,1,1])
52union(){
53cyl(d=wrist_thickness_edge,length=wrist_band_length,rounding=a_rounding,$fn=resolution);
54translate([non_flat_thickness/2,-flat_thickness/2,-wrist_band_length/2])
55cuboid([wrist_band_thickness,flat_thickness/2,wrist_band_length],anchor=BOTTOM+LEFT+FRONT,rounding=a_rounding,edges=[RIGHT+TOP,RIGHT+BOTTOM],$fn=resolution);
56}
57scale([non_flat_width/non_flat_thickness,1,1])
58union(){
59cyl(d=non_flat_thickness,length=wrist_band_length,rounding=-a_rounding,$fn=resolution);
60
61translate([non_flat_thickness/2-wrist_band_thickness,-flat_thickness/2,-wrist_band_length/2])
62cuboid([wrist_band_thickness,flat_thickness/2,wrist_band_length],anchor=BOTTOM+LEFT+FRONT);
63}
64}
65cube([wrist_width_edge/2,wrist_thickness_edge,wrist_band_length]);
66translate([0,-flat_thickness,0])
67cube([wrist_width_edge,wrist_thickness_edge/2+flat_thickness/2,wrist_band_length]);
68}
69translate([0,flat_thickness/2+non_flat_thickness/2,0])
70cuboid([flat_width/2+fix_floating_point_small_value,wrist_band_thickness,wrist_band_length],anchor=BOTTOM+LEFT+FRONT,rounding=a_rounding,edges=[FRONT+LEFT,FRONT+TOP,FRONT+BOTTOM],$fn=resolution);
71translate([0,flat_thickness/2+non_flat_thickness/2+wrist_band_thickness,0])
72difference(){
73cuboid([laces_width,laces_thickness,wrist_band_length],anchor=BOTTOM+LEFT+FRONT,rounding=a_rounding,edges=[BACK],$fn=resolution);
74length_of_holes = laces_holes*laces_holes_diameter+(laces_holes-1)*laces_hole_spacing;
75translate ([laces_width/2,laces_thickness/2,0])
76for ( i = [0:laces_holes-1]) {
77translate ([0,0,wrist_band_length/2-length_of_holes/2+length_of_holes/(laces_holes-1)*i])
78 xcyl(d=laces_holes_diameter,length=laces_width,$fn=resolution);
79}
80}
81}
82
83module pick_holder(){
84difference(){
85intersection(){
86cuboid([pick_holder_protrusion,pick_holder_thickness,wrist_band_length],anchor=BOTTOM+LEFT+FRONT,rounding=b_rounding,edges=[BACK+TOP,BACK+BOTTOM,FRONT+TOP,FRONT+BOTTOM],$fn=resolution);
87translate([0,pick_holder_radius+pick_holder_thickness/2,wrist_band_length/2])
88translate([pick_holder_protrusion/2,0,0])
89difference(){
90translate([0,-pick_holder_thickness/2,0])
91xcyl(r=pick_holder_radius,length=pick_holder_protrusion,$fn=resolution*2);
92xcyl(r=pick_holder_radius,length=pick_holder_protrusion,$fn=resolution*2);
93}
94}
95pick_holder_screws_diameter_with_tolerance=tolerances*2+pick_holder_screws_diameter;
96
97for (i = [0:1]){
98z_offset = (1-i*2)*(pick_holder_screws_diameter_with_tolerance+pick_holder_screws_diameter/2);
99translate ([pick_holder_screws_diameter_with_tolerance+pick_holder_screws_diameter/2,pick_holder_thickness/2,i*wrist_band_length+z_offset])
100 ycyl(d=pick_holder_screws_diameter_with_tolerance,length=pick_holder_thickness,$fn=resolution);
101}
102}
103}
104
105module half_wrist_band(invert=false){
106 difference(){
107 union(){
108quarter_wrist_band();
109scale([1,-1,1])quarter_wrist_band();
110 }
111 if (invert){
112 {
113 translate([wrist_width_edge/2+flat_width/2,flat_thickness/2,logo_padding])
114 rotate([90,0,-90])
115 union(){
116
117 rotate([180,0,90]) #translate([flat_thickness+text_padding,(flat_thickness-text_size)/2,-text_depth]) linear_extrude(text_depth) text(text_content,size=text_size,font=text_font,$fn=resolution/4);
118 scale([flat_thickness/168,flat_thickness/168,logo_depth/100])
119surface(file = "assets/dinosaur.png", center = false);
120 }
121}}
122}
123if (!invert){
124translate([wrist_width/2+wrist_band_thickness,-pick_holder_thickness/2,0])
125pick_holder();
126}
127}