Neale Pickett
·
2026-04-05
chanter-cap.scad
1include <BOSL2/std.scad>
2
3$fn = $preview ? 0 : 180;
4
5module rings(id) {
6 for (z = [-1, 1]) {
7 up(z) tube(id=id, wall=20, h=1);
8 }
9}
10
11// Angle off perpendicular of the bag into your cap.
12// If you want it to go exactly perpendicular, set this to 0°.
13// My David Daye cap is at about 20°,
14// but I seem to play at about 45°.
15// Calculating this involves measuring pitch and yaw against the floor,
16// but it always winds up with a single angle against the body of the cap.
17angle = 45;
18
19// Inside diameter of the cap
20id = 17.8;
21
22od = id + 4.8;
23
24lowpoly = 12;
25
26diff() cyl(h=150, d=od, anchor=BOTTOM) {
27
28 // Décor
29 ring_d = od+1;
30 position(TOP) down(8) cyl(d=ring_d, h=2, $fn=lowpoly);
31 position(CENTER) cyl(d=ring_d, h=2, $fn=lowpoly);
32 position(BOTTOM) up(8) cyl(d=ring_d, h=2, $fn=lowpoly);
33
34 // Hat
35 // We cut the hat off at a angle, to minimize supports
36 position(TOP) color("black") diff() cyl(h=50, d=od+4, anchor=BOTTOM, $fn=lowpoly);
37 tag("remove") up(10) position(TOP+RIGHT) xrot(angle-45) cuboid(100, anchor=BOTTOM);
38
39 // Schnozz
40 position(TOP) down(15) xrot(90+angle) {
41 cyl(h=60, d=10, anchor=BOTTOM);
42 tag("remove") up(0.001) cyl(h=61, d=8, anchor=BOTTOM);
43 }
44
45 // Inner bore
46 tag("remove") down(0.001) cyl(h=150, d=id, rounding=-1);
47}