- commit
- d90d693
- parent
- 73c725e
- author
- Neale Pickett
- date
- 2025-12-13 19:37:33 -0700 MST
A thing to mount little whistles on the wall :)
1 files changed,
+51,
-0
+51,
-0
1@@ -0,0 +1,51 @@
2+module commandstrip() {
3+ length = 46.0;
4+ width = 15.8;
5+ thick = 1.2; // They're actually thicker than this, but the strip needs to stick out a little
6+ translate([-width/2, 0]) cube([width, length-width, thick]);
7+ translate([0, length-width]) cylinder(d=width, h=thick);
8+}
9+
10+module post(d, h=50) {
11+ cylinder(h=h, d1=d, d2=d*0.8);
12+ cylinder(h=5, d1=d*1.4, d2=d*0.8);
13+ translate([0, 0, h]) sphere(d=d*0.8);
14+}
15+
16+width = 125;
17+depth = 36;
18+height =35;
19+
20+module WhistleMount(){
21+ $fn = 180;
22+
23+ difference() {
24+ intersection() {
25+ // Main body
26+ translate([0, 0, height/2]) cube([width, depth, height], center = true);
27+
28+ // Chamfers!
29+ translate([0, width * 0.4, 0]) rotate([0, 0, 45]) {
30+ cube(width*sqrt(2), center=true);
31+ }
32+ }
33+
34+ // Holes for the whistles
35+ for (x = [-50, -25, 0, 25, 50]) {
36+ translate([x, -7, 5]) rotate([-3, 0, 0]) cylinder(h=300, d=15.5);
37+ }
38+
39+ // Command strips
40+ for (x = [-30, 30]) {
41+ translate([x, depth/2 + 0.6, 30]) rotate([90, 180, 0]) commandstrip();
42+ }
43+
44+ // Ruby
45+ translate([0, -depth/2+0.6, 10]) rotate([90, 0, 0]) linear_extrude(height=50, convexity=10) {
46+ scale(1.5) import("ruby.svg", center=true);
47+ }
48+ }
49+}
50+
51+
52+WhistleMount();