- commit
- e7f162f
- parent
- 441cdc9
- author
- Neale Pickett
- date
- 2025-12-23 12:41:51 -0700 MST
pickett d chanter work
3 files changed,
+56,
-37
+1,
-1
1@@ -6,4 +6,4 @@ clean:
2 rm -f *.3mf
3
4 %.3mf: %.scad chanter.scad
5- openscad -D rev=\"$(commit_number):$(commit_date)\" -o $@ $<
6+ openscad -D rev=\"$(commit_number)\" -D date=\"$(commit_date)\" -o $@ $<
+50,
-32
1@@ -1,14 +1,14 @@
2 // Based on O'Flynn Rowsome Chanter Measurements
3 // http://pipers.ie/source/media/?mediaId=31307&galleryId=1353
4
5+include <BOSL/shapes.scad>
6 use <./sigil.scad>
7
8-fancy = true; // Fancy decorations?
9+ver = "D";
10+rev = "pre";
11+date = "1900-01-01";
12
13-rev = "preview";
14-stamp = str(rev);
15-
16-$fn =120;
17+$fn =$preview?30:120;
18
19 // Diameter of screw hole
20 Screwhole = 4; // [1:10]
21@@ -36,14 +36,27 @@ module ringyding(h, d) {
22
23 // A fillet is a sort of trumpet bell shape
24 module fillet(h, d1, d2) {
25- rmin = min(d1, d2)/2;
26- rmax = max(d1, d2)/2;
27- r = rmax-rmin;
28- rotate_extrude(convexity=4) {
29- difference() {
30- square([rmax, h]);
31- translate([rmax, d1>d2?h:0]) resize([r*2, h*2]) circle();
32- }
33+ dd = d1 - d2;
34+ for (i = [0:1/$fn:1]) {
35+ cylinder(h=(h+h*i)/2, d1=d1-dd*i, d2=d2);
36+ }
37+}
38+
39+module patty(h, d) {
40+ cyl(l=h, d=d, fillet=h/2);
41+}
42+
43+// A flare with a patty on each end
44+module flare(h, d1, d2) {
45+ f1 = 4;
46+ f2 = 2;
47+
48+ if (d2 > d1) {
49+ rotate([180, 0, 0]) flare(h, d2, d1);
50+ } else {
51+ translate([0, 0, 0]) cyl(h=f1, d=d1, fillet=f1/2, align=V_CENTER);
52+ translate([0, 0, f1/2]) fillet(h=h-(f1+f2)/2, d1=d1-4, d2=d2-2);
53+ translate([0, 0, h]) patty(f2, d2);
54 }
55 }
56
57@@ -63,38 +76,42 @@ module tonehole(h, td, ld, ch, undercut=1) {
58 }
59 }
60
61+height = 357.2;
62+insertion = 28; // length of metal at each end
63+
64 module chanter() {
65 // We start by building everything up in a union(),
66 // then we ream it with difference().
67 difference() {
68 union() {
69 // Inner metal tube
70- metal() cylinder(h=331.2, d=17);
71-
72+ metal() cylinder(h=height, d=16);
73+
74 // Wood body
75- translate([0, 0, 32.5]) wood() cylinder(h=258, d1=20.4, d2=18);
76-
77- if (fancy) {
78- // Bottom wood transition
79- translate([0, 0, 38.2]) ringyding(h=5.3, d=24.0);
80- translate([0, 0, 32.0]) ivory() cylinder(h=8.0, d=21.0);
81- translate([0, 0, 33.0]) ivory() fillet(h=3.5, d1=28.0, d2=21);
82- translate([0, 0, 32.0]) ivory() cylinder(h=1, d=28.0);
83- translate([0, 0, 32.0]) ringyding(h=4.0, d=28.7);
84-
85- // Top wood transition : from O'Flynn Rowsome measurements
86- // https://pipers.ie/archive/media/?mediaId=31307&galleryId=1353
87+ translate([0, 0, 30]) wood() cylinder(h=height-60, d1=20.4, d2=18);
88+
89+ // Bottom wood transition
90+ translate([0, 0, 28]) ivory() flare(h=12, d1=28.0, d2=23.0);
91+
92+ // Top wood transition : from O'Flynn Rowsome measurements
93+ // https://pipers.ie/archive/media/?mediaId=31307&galleryId=1353
94+ translate([0, 0, height-28]) ivory() flare(h=12, d1=21.0, d2=25.0);
95+
96+ if (false) {
97 translate([0, 0, 290.4]) ringyding(h=5.5, d=20);
98 translate([0, 0, 305.6]) ringyding(h=4.3, d=19);
99 translate([0, 0, 317.6]) ringyding(h=5.5, d=18);
100 translate([0, 0, 318.5]) ivory() fillet(h=8.5, d1=17, d2=24); // eliminate overhang
101 translate([0, 0, 328.3]) ringyding(h=8, d=25.4);
102- } else {
103- translate([0, 0, 27.5]) wood() cylinder(h=5, d1=17, d2=20.4);
104 }
105+ }
106
107- // This protects the reed and provides a place for tubing to connect
108- translate([0, 0, 324.5]) metal() cylinder(h=32.7, d=16); // O'Flynn Rowsome had d=14.8mm
109+ // Some engraved rings for style
110+ difference() {
111+ for (z = [6, 8, 20, 22]) {
112+ translate([0, 0, z]) cylinder(h=0.6, d=25);
113+ }
114+ cylinder(h=300, d=15);
115 }
116
117 // Inner bore
118@@ -113,7 +130,7 @@ module chanter() {
119 rotate(180) tonehole(268, 6.04, 7.95, 10.1, 1.2); // back D
120 }
121
122- sigil(17.1, stamp);
123+ translate([0, 0, height - 62]) rotate([0, 0, 90]) sigil(18, date, ver);
124 }
125 }
126
127@@ -145,3 +162,4 @@ module split(top=false) {
128 }
129
130 chanter();
131+
+5,
-4
1@@ -6,20 +6,21 @@ module cylinder_tube(height, radius, wall) {
2 }
3 }
4
5-module sigil(d, stamp, rot=0) {
6+module sigil(d, top_str="", bot_str="") {
7 // Sigil
8 translate([0, 0, 4]) intersection() {
9 cylinder_tube(50, d/2+0.5, 1);
10 union() {
11 rotate([90, 0, -90]) {
12 linear_extrude(height=d, convexity=4) {
13- translate([-4, 0]) import("ruby.svg");
14+ translate([0, 8]) import("ruby.svg", center=true);
15 // XXX: when this is in openscad prod, add center to import and remove translate
16 }
17 }
18- rotate([90, 90, -160]) {
19+ rotate([90, 0, -90]) {
20 linear_extrude(height=d, convexity=10) {
21- text(stamp, size=2, halign="right", valign="center");
22+ translate([0, 13]) text(top_str, size=2, halign="center", valign="bot");
23+ translate([0, 1]) text(bot_str, size=2, halign="center", valign="bot");
24 }
25 }
26 }