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