1include <BOSL2/std.scad>
2include <BOSL2/hinges.scad>
3include <BOSL2/std.scad>
4include <BOSL2/turtle3d.scad>
5include<BOSL2/skin.scad>
6
7bracelet_inner_diameter = 60; //mm
8bracelet_width = 9; //mm
9bracelet_drawing_width = 7;//mm
10bracelet_thickness = 3; //mm
11bracelet_rounding_radius = 1.5; //mm
12
13bracelet_pattern_count = 24;
14bracelet_pattern_path_diameter = 0.6; //mm
15
16bracelet_text = "Name: Louis Dalibard; DoB: Feb 12, 2007; Blood type: A+; Height: 177cm; Weight: 65kg; Allergies: possibly Propofol, be careful while sedating me; Vaccinated but non responsive for Hepatitis B; Organ donor by default in French law"; // "3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196442881097566593344612847564823378678316527...";
17bracelet_text_font = "Iosevka Etoile:style=bold";
18bracelet_text_height = 2.; //mm
19bracelet_text_spacing = 4; //°
20bracelet_text_depth = 1; //mm
21
22bracelet_cut_angle = 20; //°
23bracelet_text_padding_angle = 2;
24
25bracelet_fastener_inner_diameter = 4; //mm
26bracelet_fastener_outer_diameter = 7; //mm
27bracelet_overlap = 0.2; // fraction
28bracelet_fastener_thickness = 2; //mm
29
30
31bracelet_pattern_path_resolution = 180;
32bracelet_pattern_path_sweep_resolution = 24;
33resolution = 100;
34text_resolution = 10;
35
36
37// Calc
38outer_circumference = (bracelet_inner_diameter+bracelet_thickness)*PI;
39
40
41bracelet_cut_dimensions = [bracelet_inner_diameter/2+bracelet_thickness,(bracelet_inner_diameter/2+bracelet_thickness)*2*sin(bracelet_cut_angle/2),bracelet_width];
42
43
44
45difference(){
46zcyl(l=bracelet_width, d=bracelet_inner_diameter+bracelet_thickness*2, rounding = bracelet_rounding_radius, $fn=resolution);
47zcyl(l=bracelet_width, d=bracelet_inner_diameter, rounding = -bracelet_rounding_radius, $fn=resolution);
48for (b = [0 : 360/bracelet_pattern_count : 360]){
49path = [ for (a = [0 : 360/bracelet_pattern_path_resolution : 360]) [(bracelet_inner_diameter/2+bracelet_thickness)*sin(a), (bracelet_inner_diameter/2+bracelet_thickness)*cos(a),bracelet_drawing_width/2-bracelet_drawing_width*exp((a-180)/10)/(1+exp((a-180)/10))]];
50rotate([0,0,b]) path_sweep(circle(d=bracelet_pattern_path_diameter, $fn=bracelet_pattern_path_sweep_resolution), path);
51}
52cuboid(bracelet_cut_dimensions,anchor=LEFT);
53#for (i = [0:len(bracelet_text)-1]){
54rot_angle=i*bracelet_text_spacing;
55rot_angle_normalised = rot_angle%(360-bracelet_cut_angle-bracelet_text_padding_angle-bracelet_text_spacing);
56rot_count = floor(rot_angle/(360-bracelet_cut_angle-bracelet_text_padding_angle-bracelet_text_spacing));
57
58rot_offset= (floor(bracelet_text_spacing*(len(bracelet_text)-1)/(360-bracelet_cut_angle-bracelet_text_padding_angle-bracelet_text_spacing)) == 0) ? (-bracelet_drawing_width+bracelet_text_height)/2: -((bracelet_drawing_width-bracelet_text_height)*floor(rot_angle/(360-bracelet_cut_angle-bracelet_text_padding_angle-bracelet_text_spacing))/floor(bracelet_text_spacing*(len(bracelet_text)-1)/(360-bracelet_cut_angle-bracelet_text_padding_angle-bracelet_text_spacing)));
59
60rotate([0,0,bracelet_text_padding_angle/2+bracelet_cut_angle/2+i*bracelet_text_spacing%(360-bracelet_cut_angle-bracelet_text_padding_angle-bracelet_text_spacing)]) translate([bracelet_inner_diameter/2+bracelet_thickness-bracelet_text_depth,0,rot_offset+bracelet_drawing_width/2-bracelet_text_height]) rotate([90,0,90]) linear_extrude(bracelet_text_depth) text(bracelet_text[i],size=bracelet_text_height,font=bracelet_text_font,$fn=text_resolution);
61}
62}
63
64fastener_translate = [(bracelet_inner_diameter+bracelet_thickness)/2*cos(bracelet_cut_angle/2),bracelet_cut_dimensions.y/2+bracelet_fastener_outer_diameter*(bracelet_overlap-1/2),0];
65
66translate(fastener_translate)
67difference(){
68xcyl(l=bracelet_thickness,d=bracelet_fastener_outer_diameter,rounding=bracelet_rounding_radius,$fn=resolution);
69xcyl(l=bracelet_thickness,d=bracelet_fastener_inner_diameter,rounding=-bracelet_rounding_radius,$fn=resolution);
70}
71
72translate([fastener_translate.x,-fastener_translate.y,0])
73difference(){
74zcyl(l=bracelet_thickness,d=bracelet_fastener_outer_diameter,rounding=bracelet_rounding_radius,$fn=resolution);
75zcyl(l=bracelet_thickness,d=bracelet_fastener_inner_diameter,rounding=-bracelet_rounding_radius,$fn=resolution);
76cuboid([bracelet_fastener_outer_diameter/2,bracelet_fastener_outer_diameter/2,bracelet_thickness],anchor=RIGHT+BACK);
77}
78