4 module cut_ellipse(height, dist, x) {
6 translate([0, dist, height/2-x])
9 cylinder(r=height/2, h=2);
10 translate([0, 0, -infty/2])
11 cube(infty, center=true);
16 translate([-1.5, 0, -1])
18 translate([0, 0, -1]) difference() {
20 translate([3-epsilon, 3-epsilon, -epsilon])
21 cylinder(r=3, h=9+2*epsilon);
27 translate([-infty/2-1.5+epsilon, 0, 0])
28 cube(infty, center=true);
34 cut_ellipse(25, 31, 4);
35 cut_ellipse(10, 24, 6);
38 // left-side and right-side clip
41 translate([3.75, 31-epsilon, 0])
46 translate([-3.75, 31-epsilon, 0])
51 translate([0, 0, -infty/2])
52 cube(infty, center=true);
56 translate([0, dist, 0])
57 interdental_cylinder();
62 translate([0, dist, 0])
67 difference() { union() {
68 for (angle=[-24:6:24]) {
69 translate([0, -112, 0])
71 translate([0, 130, 0])
78 translate([0, -112, 0]) difference() {
80 cylinder(r=126, h=11);
81 translate([0, 0, 11-epsilon])
87 cylinder(r=159, h=11);
88 translate([0,0,-infty/2])
89 cylinder(r=158, h=infty);
94 translate([infty/2, 0, 0])
95 cube(infty, center=true);
97 translate([-infty/2, 0, 0])
98 cube(infty, center=true);
101 translate([0, 112-infty/2-epsilon, 0])
102 cube(infty, center=true);
104 translate([0, 0, -infty/2-epsilon])
105 cube(infty, center=true);
107 translate([infty/2, 0, 0])
108 cube(infty, center=true);
110 translate([-infty/2, 0, 0])
111 cube(infty, center=true);
114 // rear-side protrusion
115 translate([-50, 1, 6])
117 cylinder(r=3, h=40, $fn=4);
118 // rear-side protrusion
119 translate([10, 1, 6])
121 cylinder(r=3, h=40, $fn=4);
126 cylinder(r=3.5, h=55);
129 translate([0,-6,-infty/2])
130 cylinder(r=1.75, h=infty, $fn=6);
134 module interdental_hole() {
135 translate([0, 0, -infty/2])
136 cylinder(r=4, h=infty);
139 module interdental_cylinder() {
140 // translate([-5.5, -5.5, 0]) cube([11, 11, 8]);
142 cylinder(r=5.5, h=11);
143 translate([-infty/2, 0, 19])
145 cylinder(r=9, h=infty);
149 translate([0, -5.50, 3])
152 translate([0, 0, -infty/2-epsilon])
153 cube(infty, center=true);
160 for (angle=[-45:18:45]) {
161 rotate([0, 0, angle])
162 for (dist=[30:10:60])
163 translate([dist, 0, 0])
165 interdental_cylinder();
176 cylinder(r=3, h=infty);
178 translate([0,-4,-epsilon])
179 cylinder(r=1.5, h=infty);