- commit
- 21ce81b
- parent
- a244c05
- author
- Neale Pickett
- date
- 2026-01-28 15:12:55 -0700 MST
Start designing a fipple
1 files changed,
+56,
-0
+56,
-0
1@@ -0,0 +1,56 @@
2+include <BOSL2/std.scad>
3+
4+// TODO: I don't think the windway is centered over the blade.
5+// TODO: Blade undercut
6+// TODO: Block undercut and overcut
7+// TODO: Window height?
8+
9+$fn = 180;
10+
11+ang = 60;
12+od = 25;
13+id = 23;
14+height = 50;
15+
16+// Just the crust of a pie_slice.
17+module pie_crust(h, ang, r, thickness=5) {
18+ difference() {
19+ pie_slice(h=h, ang=ang, r=r, spin=-ang/2);
20+ translate([0, 0, -1]) cylinder(h=h+2, r=r-thickness);
21+ }
22+}
23+
24+// I'm using terminology from https://www.kingsmills.us/jubilee/store/fipterm.htm
25+
26+difference() {
27+ cylinder(d=od, h=height);
28+
29+ // Mouthpiece shaping
30+ mouth_taper_d = od * 1.5;
31+ translate([-od/2, 0, height]) {
32+ rotate([90, 0, 10]) cylinder(h=100, d=mouth_taper_d, center=true);
33+ rotate([90, 0, -10]) cylinder(h=100, d=mouth_taper_d, center=true);
34+ }
35+
36+ // Marat's idea: skew everything at 45° for nice overhangs
37+ skew(azy=45) {
38+ // Inner bore
39+ // Scoot it down by id/2 so it clears away all material at the bottom despite the skew
40+ translate([0, 0, -id/2]) cylinder(d=id, h=height - mouth_taper_d/2);
41+
42+ // Everything from here on happens below the curve
43+ translate([0, 0, height-od]) {
44+ // Windway
45+ pie_crust(h=100, ang=ang, r=(od-1)/2, thickness=1);
46+
47+ // Blade overcut
48+ // XXX: I would like to be able to provide a height to something and have it intersect the outside diameter at that height
49+ // Shoot a cutting laser out from the axis.
50+ translate([0, 0, 0]) rotate(-45/2) rotate_extrude(angle=45) skew(ayx=-50) translate([id/2-1, 0]) square(10);
51+ }
52+ }
53+}
54+
55+//skew(axz=-20) pie_crust(h=50, ang=45, r=100, thickness=1);
56+//rotate(-45/2) rotate_extrude(angle=45) skew(ayx=20) square(40);
57+//skew(azx=20) rotate(-45/2) pie_slice(h=40, ang=45, r=40);