1use scad_tree::prelude::*;
26
27fn main() {
28 make_bottle();
29 make_cap();
30}
31
32fn make_cap() {
33 let cylinder = Polyhedron::cylinder(23.0, 12.0, 128).into_scad();
34 let mut tap = metric_thread::tap(40, 14.0, 128, false, false);
35 tap = translate!([0.0, 0.0, 2.0], tap;);
36
37 let cap = cylinder - tap;
38 cap.save("output/bottle_cap.scad");
39}
40
41fn make_bottle() {
42 let mut outside_profile = Pt2s::new();
43 outside_profile.push(Pt2::new(0.0, 125.0));
44 outside_profile.append(&mut dim2::cubic_bezier(
45 Pt2::new(19.0, 125.0),
46 Pt2::new(22.5, 110.0),
47 Pt2::new(32.5, 105.0),
48 Pt2::new(32.5, 100.0),
49 6,
50 ));
51 outside_profile.append(&mut dim2::quadratic_bezier(
52 Pt2::new(32.5, 5.0),
53 Pt2::new(32.5, 0.0),
54 Pt2::new(27.5, 0.0),
55 6,
56 ));
57 outside_profile.push(Pt2::new(0.0, 0.0));
58
59 let mut inside_profile = Pt2s::new();
60 inside_profile.push(Pt2::new(0.0, 140.0));
61 inside_profile.push(Pt2::new(16.0, 140.0));
62 inside_profile.append(&mut dim2::cubic_bezier(
63 Pt2::new(16.0, 125.0),
64 Pt2::new(20.5, 110.0),
65 Pt2::new(30.5, 105.0),
66 Pt2::new(30.5, 100.0),
67 6,
68 ));
69 inside_profile.append(&mut dim2::quadratic_bezier(
70 Pt2::new(30.5, 7.0),
71 Pt2::new(30.5, 2.0),
72 Pt2::new(25.5, 2.0),
73 6,
74 ));
75 inside_profile.push(Pt2::new(0.0, 2.0));
76
77 let outside = rotate_extrude!(angle=360.0, convexity=10, fn=128, polygon!(outside_profile););
78 let inside = rotate_extrude!(angle=360.0, convexity=10, fn=128, polygon!(inside_profile););
79
80 let threaded_rod = translate!([0.0,0.0,120.0], metric_thread::threaded_rod(40, 15.0, 128, 0.0, 180.0, false, false););
81
82 let bottle = outside + threaded_rod - inside;
83
84 bottle.save("output/bottle.scad");
85}